Swing/PaddingComboBox のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/PaddingComboBox へ行く。
- 1 (2007-05-28 (月) 05:42:18)
- 2 (2007-05-28 (月) 08:31:24)
- 3 (2007-05-29 (火) 11:53:06)
- 4 (2007-05-29 (火) 16:45:04)
- 5 (2008-02-20 (水) 11:18:34)
- 6 (2008-03-11 (火) 21:35:33)
- 7 (2008-03-12 (水) 13:07:36)
- 8 (2008-03-12 (水) 19:32:52)
- 9 (2008-04-02 (水) 20:00:09)
- 10 (2008-04-05 (土) 20:40:17)
- 11 (2008-04-10 (木) 15:41:06)
- 12 (2008-04-26 (土) 01:14:40)
- 13 (2012-02-17 (金) 17:21:59)
- 14 (2012-02-20 (月) 16:52:13)
- 15 (2012-08-15 (水) 13:58:34)
- 16 (2013-02-06 (水) 02:25:41)
- 17 (2013-08-18 (日) 01:05:22)
- 18 (2013-11-19 (火) 15:34:53)
- 19 (2013-11-19 (火) 16:39:14)
- 20 (2014-11-01 (土) 00:46:09)
- 21 (2015-02-19 (木) 18:39:01)
- 22 (2015-03-07 (土) 15:41:01)
- 23 (2016-05-28 (土) 18:22:13)
- 24 (2016-06-01 (水) 18:41:10)
- 25 (2017-05-01 (月) 20:44:07)
- 26 (2017-08-18 (金) 17:56:46)
- 27 (2017-11-02 (木) 15:34:40)
- 28 (2018-08-28 (火) 14:43:50)
- 29 (2019-05-22 (水) 19:35:38)
- 30 (2020-08-20 (木) 16:53:53)
- 31 (2022-01-27 (木) 14:24:55)
- 32 (2022-08-20 (土) 22:15:25)
TITLE:JComboBoxの内余白
JComboBoxの内余白
編集者:Terai Atsuhiro
作成日:2007-05-28
更新日:2022-01-27 (木) 14:24:55
概要
JComboBoxのエディタなどに内余白を設定します。
#screenshot
サンプルコード
//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;
解説
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を指定しても無視されるようです。
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);
- 追記
- 無視されるのは、BasicLaF系(WindowsLaFなど)で、SynthLaF系(Nimbus, GTKなど)では上記の設定は有効になる?
- 1.6.0_10-beta-b13 では、
BasicLaF系はどちらも、UIManager.put("ComboBox.padding", insets) が使用できる?
上記のサンプルを、余白に色無しにして、Ubuntu 7.04(GNOME 2.18.1) JDK 1.6.0 で実行すると、以下のよう*1になります。
#screenshot(,screenshot1.png)
参考リンク
コメント
- なんだか、よく分からなくなってきましたorz。 -- terai