Swing/ComboEditorPlaceholder のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboEditorPlaceholder へ行く。
- 1 (2019-04-29 (月) 15:56:33)
- 2 (2019-07-29 (月) 02:31:12)
- 3 (2021-02-04 (木) 01:44:38)
- 4 (2024-03-14 (木) 12:17:19)
- category: swing folder: ComboEditorPlaceholder title: ComboBoxEditorにJLayerを設定してプレースホルダ文字列を表示する tags: [JComboBox, ComboBoxEditor, JLayer] author: aterai pubdate: 2019-04-29T15:55:58+09:00 description: JComboBoxのComboBoxEditorにJLayerを設定し、そのテキストが空の場合はプレースホルダ文字列を表示します。 image: https://drive.google.com/uc?export=view&id=1tj1SR1p6B8munrw_eO-ktRIB0pyl4h2-kw
概要
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
に切り替えると縁や内余白がおかしくなる
- このため、他の
- 編集可能に設定した