概要

JComboBoxでアイテムが選択されていない場合、代わりに表示するプレースホルダ文字列を設定します。

サンプルコード

JComboBox<String> combo1 = new JComboBox<>(
    new String[] {"One", "Two", "Three", "Four"});
combo1.setSelectedIndex(-1);
combo1.setRenderer(new DefaultListCellRenderer() {
  @Override public Component getListCellRendererComponent(
        JList<?> list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {
    // XXX: String str = index < 0 ? "- Select Item -" : value.toString();
    String str = Objects.toString(value, "- Select Item -");
    super.getListCellRendererComponent(
        list, str, index, isSelected, cellHasFocus);
    return this;
  }
});
view all

解説

上記のサンプルでは、編集不可のJComboBoxにアイテムが選択されていない場合にヒントとしてプレースホルダ文字列を表示するリストセルレンダラーを設定しています。

  • リストセルレンダラーはDefaultListCellRenderer#getListCellRendererComponent(...)メソッドをオーバーライドし、引数のvaluenullの場合のみヒントを表示するコンポーネントを返すよう設定
    • 引数のObject valuenullの場合ではなくリストのindex-1の場合にヒント文字列を表示するように設定すると、マウスクリックでJComboBoxの選択状態を変更できなくなる?
  • リストセルレンダラー側でヒント文字列を表示しているため、JComboBoxのモデル側にプレースホルダ文字列を含めるなどの変更が不要

参考リンク

コメント