Swing/IconComboBox のバックアップの現在との差分(No.16)
- category: swing folder: IconComboBox title: JComboBoxにアイコンを表示 tags: [JComboBox, JTextField, Icon, ListCellRenderer, MatteBorder, JLabel] author: aterai pubdate: 2004-12-27T01:32:14+09:00 description: JComboBoxを編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。 image:
概要
JComboBox
を編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。
Screenshot
Advertisement
サンプルコード
private static Border makeIconBorder(JComponent c, ImageIcon i) {
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);
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JLabel#setIcon(...)
でアイコンを追加し、リスト内の各項目にアイコンが表示されるように設定したListCellRenderer
をJComboBox
に設定しています。
上記のサンプルでは、リスト内の各項目にJLabel#setIcon(...)
メソッドでアイコンを追加したListCellRenderer
をJComboBox
に設定しています。
setEditable(false)
-
JComboBox
の文字列入力欄が編集不可の場合、リスト内の各項目だけでなく、JComboBox
にもアイコンが表示される -
JComboBox
が編集不可の場合、リスト内の各項目だけでなくJComboBox
にもアイコンが表示される
-
setEditable(true)
- 上:
-
JComboBox
の文字列入力欄には、アイコンが表示されない -
JComboBox
の文字列入力欄にはアイコンが表示されない
-
- 中:
-
combo.getEditor().getEditorComponent()
で取得したJTextField
にMatteBorder
を追加して、文字列入力欄にアイコンを表示 -
combo.getEditor().getEditorComponent()
で取得したJTextField
にMatteBorder
を追加して文字列入力欄にアイコンを表示
-
- 下:
combo.getEditor().getEditorComponent()
で取得したJTextField
にアイコンを追加したJLabel
を追加- アイコン(
JLabel
)が文字列と重ならないように、JTextField
にはその幅だけ余白をとるように設定 - アイコン(
JLabel
)が文字列と重ならないようにJTextField
にはその幅だけ余白をとるように設定
- 上: