TITLE:JComboBoxの内余白
#navi(../)
*JComboBoxの内余白 [#s9f3687d]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2007-05-28~
更新日:&lastmod;

#contents

**概要 [#k7f3f4d5]
JComboBoxのエディタなどに内余白を設定します。

#screenshot

**サンプルコード [#o79d2c4d]
#code{{
//Border padding = BorderFactory.createEmptyBorder(0,5,0,0);
Border padding = BorderFactory.createMatteBorder(0,5,0,0,new Color(1f,.9f,.9f));

final ListCellRenderer lcr = combo00.getRenderer();
((JLabel)lcr).setBorder(padding);

combo00.setRenderer(lcr);
combo01.setRenderer(lcr);
combo02.setRenderer(lcr);

combo00.setEditable(false);
combo01.setEditable(true);
combo02.setEditable(true);

JTextField editor = (JTextField)(combo01.getEditor()).getEditorComponent();
editor.setBorder(padding);
editor.setOpaque(true);
editor.setBackground(new Color(.9f,1f,.9f));

combo02.setBorder(BorderFactory.createCompoundBorder(combo02.getBorder(), padding));
//combo02.setOpaque(true);
//combo02.setBackground(new Color(.9f,1f,.9f));
}}
-&jnlp;
-&jar;
-&zip;

**解説 [#ra0eef84]
JComboBoxが編集不可の場合、ListCellRendererで余白を指定することが出来ます。上記のサンプルでは、EmptyBorderの代わりにMatteBorderを使って余白を着色してテストしています。

-上
-- 編集不可でListCellRendererで余白を指定

-中
-- 編集可でListCellRendererで余白を指定
-- JComboBox#getEditor()#getEditorComponent()で取得したJTextFieldに余白を指定
-- JDK 1.5 では余白を指定しても反映されない
-- JDK 1.6 では取得したJTextFieldをsetOpaque(true)としないと背景色は反映されない

-下
-- 編集可でListCellRendererで余白を指定
-- JComboBox#setBorder()で、元のBorderの内側に余白を指定
-- JDK 1.6 では余計な?余白が発生する

Ubuntu 7.04(GNOME 2.18.1) JDK 1.6.0 余白に色無しでは、以下のようになります。
#screenshot(,screenshot1.png)

**参考リンク [#w8434b1f]
-[[JComboBoxにアイコンを表示>Swing/IconComboBox]]

**コメント [#df84d3cd]
#comment