Swing/IconComboBox のバックアップ(No.16)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/IconComboBox へ行く。
- 1 (2004-12-27 (月) 01:32:14)
- 2 (2004-12-27 (月) 03:24:01)
- 3 (2005-04-28 (木) 04:33:07)
- 4 (2005-06-08 (水) 16:12:34)
- 5 (2005-06-27 (月) 06:47:31)
- 6 (2005-10-19 (水) 20:02:24)
- 7 (2006-02-27 (月) 16:02:57)
- 8 (2006-09-08 (金) 14:48:59)
- 9 (2007-05-28 (月) 06:30:36)
- 10 (2009-08-20 (木) 16:32:34)
- 11 (2009-09-06 (日) 12:31:29)
- 12 (2013-04-14 (日) 00:44:03)
- 13 (2015-03-17 (火) 15:01:21)
- 14 (2015-03-17 (火) 15:06:33)
- 15 (2016-12-28 (水) 17:18:41)
- 16 (2017-12-10 (日) 22:12:47)
- 17 (2019-12-05 (木) 15:41:28)
- 18 (2021-06-08 (火) 11:23:34)
- 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
に設定しています。
setEditable(false)
JComboBox
の文字列入力欄が編集不可の場合、リスト内の各項目だけでなく、JComboBox
にもアイコンが表示される
setEditable(true)
- 上:
JComboBox
の文字列入力欄には、アイコンが表示されない
- 中:
combo.getEditor().getEditorComponent()
で取得したJTextField
にMatteBorder
を追加して、文字列入力欄にアイコンを表示
- 下:
combo.getEditor().getEditorComponent()
で取得したJTextField
にアイコンを追加したJLabel
を追加- アイコン(
JLabel
)が文字列と重ならないように、JTextField
にはその幅だけ余白をとるように設定
- 上: