ComboBoxEditorにJLayerを設定してプレースホルダ文字列を表示する
Total: 2307, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JComboBoxのComboBoxEditorにJLayerを設定し、そのテキストが空の場合はプレースホルダ文字列を表示します。
Screenshot

Advertisement
Source Code Examples
combo2.setEditor(new BasicComboBoxEditor() {
private Component editorComponent;
@Override public Component getEditorComponent() {
editorComponent = Optional.ofNullable(editorComponent)
.orElseGet(() -> {
JTextComponent tc = (JTextComponent) super.getEditorComponent();
return new JLayer<>(tc, new PlaceholderLayerUI<>("- Select type -"));
});
return editorComponent;
}
});
combo2.setBorder(BorderFactory.createCompoundBorder(
combo2.getBorder(),
BorderFactory.createEmptyBorder(0, 2, 0, 0)));
View in GitHub: Java, KotlinDescription
- 上:
- デフォルトの編集可能な
JComboBox - 編集可能な
JComboBoxの場合は、JComboBoxでアイテムが選択されていない場合のプレースホルダ文字列を設定するのようにセルレンダラーを使用したプレースホルダ文字列の表示は不可
- デフォルトの編集可能な
- 下:
- 編集可能に設定した
JComboBoxにプレースホルダ文字列を表示するJLayerでラップしたJTextFieldを生成するComboBoxEditorを設定 BasicComboBoxEditor#getEditorComponent()はエディタとしてComponentを返すためJLayerでラップしたJTextFieldを使用可能BasicComboBoxEditor#createEditorComponent()はJTextFieldを返すため、こちらをオーバーライドする場合はJTextFieldにフォーカスと文字列が無い場合の表示などのようにFocusListenerを使用する必要がある
WindowsLookAndFeelでエディタの内余白が適用されない場合がある?ためJComboBox本体の縁を変更- このため、他の
LookAndFeelに切り替えると縁や内余白がおかしくなる
- このため、他の
- 編集可能に設定した