• 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

概要

JComboBoxComboBoxEditorJLayerを設定し、そのテキストが空の場合はプレースホルダ文字列を表示します。

サンプルコード

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にプレースホルダ文字列を表示するJLayerでラップしたJTextFieldを生成するComboBoxEditorを設定
    • BasicComboBoxEditor#getEditorComponent()はエディタとしてComponentを返すため、JLayerでラップしたJTextFieldを使用可能
    • WindowsLookAndFeelでエディタの内余白が適用されない場合がある?ためJComboBox本体の縁を変更
      • このため、他のLookAndFeelに切り替えると縁や内余白がおかしくなる

参考リンク

コメント