TITLE:JComboBoxの内余白
#navi(../)
*JComboBoxの内余白 [#s9f3687d]
Posted by [[terai]] at 2007-05-28

#contents

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

-&jnlp;
-&jar;
-&zip;

#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));
}}

**解説 [#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 では余計な?余白が発生する

----
以下のようにエディタにMarginを指定しても無視されるようです。
#code{{
editor = (JTextField) combo.getEditor().getEditorComponent();
Insets m = editor.getMargin();
Insets margin = new Insets(m.top,m.left+10,m.bottom,m.right);
//System.out.println(margin.toString());
editor.setMargin(margin);
}}

-追記
--無視されるのは、Basic L&F系(Windows L&Fなど)で、Synth L&F系(Nimbus, GTK L&Fなど)では上記の設定は有効になる? 
--1.6.0_10-beta-b13 では、%%Basic L&F系は%% どちらも、UIManager.put("ComboBox.padding", insets) が使用できる?

----
上記のサンプルを、余白に色無しにして、Ubuntu 7.04(GNOME 2.18.1) JDK 1.6.0 で実行すると、以下のよう((outsideBorderとinsideBorderが逆になっている?))になります。
#screenshot(,screenshot1.png)

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

**コメント [#df84d3cd]
- なんだか、よく分からなくなってきましたorz。 -- [[terai]] &new{2008-03-11 (火) 21:38:58};

#comment