概要

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に切り替えると縁や内余白がおかしくなる

参考リンク

コメント