Swing/IconComboBox のバックアップの現在との差分(No.10)
TITLE:JComboBoxにアイコンを表示
Posted by terai at 2004-12-27
JComboBoxにアイコンを表示
JComboBoxを編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。-
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
を編集可にしてテキスト入力部分とリスト部分にアイコンを表示します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
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);
}
解説
- 一番上
- デフォルトのListCellRendererを使用するJComboBoxです。
- 上から二番目
- JComboBoxフィールドが編集不可の場合、ListCellRendererを実装することでアイコン表示することができます。
- 下から二番目
- JComboBoxフィールドが編集可の場合、ListCellRendererを実装しても、Editor部分はアイコン表示されません。
- 一番下
- JComboBoxフィールドが編集可の場合でも、MatteBorderを使用することでエディタ部分にもアイコンを表示することができます。
解説
上記のサンプルでは、リスト内の各項目にJLabel#setIcon(...)
メソッドでアイコンを追加したListCellRenderer
をJComboBox
に設定しています。
参考リンク
- MatteBorderでラベル枠を修飾
- JTextField内にアイコンを追加
- JComboBoxの内余白
-
setEditable(false)
-
JComboBox
が編集不可の場合、リスト内の各項目だけでなくJComboBox
にもアイコンが表示される
-
-
setEditable(true)
- 上:
-
JComboBox
の文字列入力欄にはアイコンが表示されない
-
- 中:
-
combo.getEditor().getEditorComponent()
で取得したJTextField
にMatteBorder
を追加して文字列入力欄にアイコンを表示
-
- 下:
-
combo.getEditor().getEditorComponent()
で取得したJTextField
にアイコンを追加したJLabel
を追加 - アイコン(
JLabel
)が文字列と重ならないようにJTextField
にはその幅だけ余白をとるように設定
-
- 上: