ComboBoxEditorにJLayerを設定してプレースホルダ文字列を表示する
Total: 1940
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JComboBox
のComboBoxEditor
にJLayer
を設定し、そのテキストが空の場合はプレースホルダ文字列を表示します。
Screenshot
Advertisement
サンプルコード
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, Kotlin解説
- 上:
- デフォルトの編集可能な
JComboBox
- 編集可能な
JComboBox
の場合は、JComboBoxでアイテムが選択されていない場合のプレースホルダ文字列を設定するのようにセルレンダラーを使用したプレースホルダ文字列の表示は不可
- デフォルトの編集可能な
- 下:
- 編集可能に設定した
JComboBox
にプレースホルダ文字列を表示するJLayer
でラップしたJTextField
を生成するComboBoxEditor
を設定 BasicComboBoxEditor#getEditorComponent()
はエディタとしてComponent
を返すためJLayer
でラップしたJTextField
を使用可能BasicComboBoxEditor#createEditorComponent()
はJTextField
を返すため、こちらをオーバーライドする場合はJTextFieldにフォーカスと文字列が無い場合の表示などのようにFocusListener
を使用する必要がある
WindowsLookAndFeel
でエディタの内余白が適用されない場合がある?ためJComboBox
本体の縁を変更- このため、他の
LookAndFeel
に切り替えると縁や内余白がおかしくなる
- このため、他の
- 編集可能に設定した