Swing/ComboBoxPlaceholder のバックアップ(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboBoxPlaceholder へ行く。
- 1 (2017-05-01 (月) 18:57:27)
- 2 (2017-12-01 (金) 18:09:47)
- 3 (2018-02-15 (木) 14:23:42)
- 4 (2018-03-28 (水) 18:16:29)
- 5 (2018-04-09 (月) 15:11:19)
- 6 (2018-04-12 (木) 13:09:08)
- 7 (2018-04-18 (水) 20:50:10)
- 8 (2018-04-19 (木) 13:46:24)
- 9 (2018-04-20 (金) 17:18:54)
- 10 (2018-11-19 (月) 22:17:14)
- 11 (2018-11-26 (月) 20:06:38)
- 12 (2019-05-24 (金) 19:23:12)
- 13 (2019-08-14 (水) 15:41:21)
- 14 (2019-08-15 (木) 16:04:08)
- 15 (2019-09-25 (水) 21:28:20)
- 16 (2019-10-02 (水) 13:44:20)
- 17 (2020-03-23 (月) 20:13:59)
- 18 (2021-09-29 (水) 11:34:26)
- 19 (2022-08-12 (金) 00:58:07)
- category: swing folder: ComboBoxPlaceholder title: JComboBoxでアイテムが選択されていない場合のプレースホルダ文字列を設定する tags: [JComboBox, ListCellRenderer] author: aterai pubdate: 2017-05-01T14:53:34+09:00 description: JComboBoxでアイテムが選択されていない場合、代わりに表示するプレースホルダ文字列を設定します。 image: https://drive.google.com/uc?id=1R3IHJMxqNMm4oHGv9wmZ8FXpeZJn0AvEwA
概要
JComboBox
でアイテムが選択されていない場合、代わりに表示するプレースホルダ文字列を設定します。
Screenshot
Advertisement
サンプルコード
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 in GitHub: Java, Kotlin解説
上記のサンプルでは、編集不可のJComboBox
にアイテムが選択されていない場合はヒントとしてプレースホルダ文字列を表示するリストセルレンダラーを設定しています。
- リストセルレンダラーは、
DefaultListCellRenderer#getListCellRendererComponent(...)
メソッドをオーバーライドし、引数のvalue
がnull
の場合のみヒントを表示するコンポーネントを返すよう設定- 注: 引数の
Object value
がnull
の場合ではなく、リストのindex
が-1
の場合にヒント文字列を表示するように設定すると、マウスクリックなどで選択が変更できなくなる?
- 注: 引数の
- リストセルレンダラーでヒントを表示しているだけなので、
JComboBox
のモデル自体にプレースホルダ文字列を含める必要がない