Swing/IconComboBox のバックアップの現在との差分(No.6)
JComboBoxにアイコンを表示
編集者:Terai Atsuhiro~
作成日:2004-12-27
更新日:2021-06-08 (火) 11:23:34
概要
JComboBox
を編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。
概要
JComboBoxを編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。Screenshot

Advertisement

サンプルコード
#spanend
#spanadd
private static Border makeIconBorder(JComponent c, ImageIcon i) {
#spanend
int iw = i.getIconWidth();
Border b1 = BorderFactory.createMatteBorder(0, iw, 0, 0, i);
Border b2 = BorderFactory.createEmptyBorder(0, 5, 0, 0);
Border b3 = BorderFactory.createCompoundBorder(b1, b2);
return BorderFactory.createCompoundBorder(c.getBorder(), b3);
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlinサンプルコード
private static Border makeIconBorder(JComponent c, ImageIcon i) { Border b1 = BorderFactory.createMatteBorder( 0, i.getIconWidth(), 0, 0, i); Border b2 = BorderFactory.createEmptyBorder(0,5,0,0); Border b3 = BorderFactory.createCompoundBorder(b1, b2); return BorderFactory.createCompoundBorder(c.getBorder(), b3); }
解説
上記のサンプルでは、リスト内の各項目にJLabel#setIcon(...)
メソッドでアイコンを追加したListCellRenderer
をJComboBox
に設定しています。
- サンプルを起動
- jarファイル
- ソース
-
setEditable(false)
-
JComboBox
が編集不可の場合、リスト内の各項目だけでなくJComboBox
にもアイコンが表示される
-
-
setEditable(true)
- 上:
-
JComboBox
の文字列入力欄にはアイコンが表示されない
-
- 中:
-
combo.getEditor().getEditorComponent()
で取得したJTextField
にMatteBorder
を追加して文字列入力欄にアイコンを表示
-
- 下:
-
combo.getEditor().getEditorComponent()
で取得したJTextField
にアイコンを追加したJLabel
を追加 - アイコン(
JLabel
)が文字列と重ならないようにJTextField
にはその幅だけ余白をとるように設定
-
- 上:
解説
- 一番上
- 通常のJComboBoxです。
- 上から二番目
- JComboBoxフィールドが編集不可の場合、ListCellRendererを使用することでアイコン表示することができます。
- 下から二番目
- JComboBoxフィールドが編集可の場合、ListCellRendererを使用しても、Editor部分はアイコン表示されません。
- 一番下
- JComboBoxフィールドが編集可の場合でも、MatteBorderを使用することでエディタ部分にもアイコンを表示することができます。