Swing/PaddingComboBox のバックアップ(No.17)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
- 33 (2025-01-03 (金) 08:57:02)
- 34 (2025-01-03 (金) 09:01:23)
- 35 (2025-01-03 (金) 09:02:38)
- 36 (2025-01-03 (金) 09:03:21)
- 37 (2025-01-03 (金) 09:04:02)
- 38 (2025-06-19 (木) 12:41:37)
- 39 (2025-06-19 (木) 12:43:47)
TITLE:JComboBoxの内余白
Posted by aterai at 2007-05-28
JComboBoxの内余白
`JComboBox`のエディタなどに内余白を設定します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
Border padding = BorderFactory.createEmptyBorder(0,5,0,0);
ListCellRenderer lcr = combo.getRenderer();
((JLabel)lcr).setBorder(padding);
combo.setRenderer(lcr);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、`JComboBoxに、Border(EmptyBorderとMatteBorderを切り替え可能)を設定したListCellRendererを設定して、ドロップダウンリストの左余白をすこし広げています。JComboBox`が編集不可の場合、エディタ部分もこの余白が自動的に適用されます。
- `
0`:編集不可- `
ListCellRenderer`で余白を指定
- `
以下は、`JComboBox`が編集可の場合のテストです。
- `
1: テキストフィールドの元Border+ 任意のBorder`で余白を設定- `
editor.setBorder(BorderFactory.createCompoundBorder(editor.getBorder(), padding));` - `
JComboBox#getEditor()#getEditorComponent()で取得したJTextField`に余白を指定 - `
JDK 1.5`では余白を指定しても反映されない - `
JDK 1.6では取得したJTextFieldをsetOpaque(true)`としないと背景色は反映されない
- `
- `
2: テキストフィールドの元Borderは無視して任意のBorder`のみで余白を設定- `
editor.setBorder(padding);` - `
JComboBox#getEditor()#getEditorComponent()で取得したJTextField`に余白を指定 - `
MetalLookAndFeel`でテキストフィールドの枠が描画できない
- `
- `
3: テキストフィールドのInsets+5`ピクセル余白を設定- `
editor.setMargin(new Insets(i.top,i.left+5,i.bottom,i.right));` - `
MetalLookAndFeel,MotifLookAndFeel,WindowsLookAndFeel`などでは無効 - `
NimbusLookAndFeelでは有効だが、JComboBox`の高さなども変化してしまう
- `
- `
4: テキストフィールドのMargin+5`ピクセル余白を設定- `
editor.setMargin(new Insets(m.top,m.left+5,m.bottom,m.right));` - `
MetalLookAndFeel,MotifLookAndFeel,WindowsLookAndFeel`などでは無効 - `
NimbusLookAndFeel`では有効
- `
- `
5:JComboBoxのBorder+ 任意のBorderで余白をJComboBox`自身に設定- `
JComboBox#setBorder()で、元のBorder`の内側に余白を指定 - `
WindowsLookAndFeel,MotifLookAndFeel`で有効? - `
MetalLookAndFeel,NimbusLookAndFeelでは、JComboBox`の外側に余白が付く
- `
- `
6:JComboBoxのBorder+ 任意のBorderで余白をJComboBox`自身に設定- `
JComboBox#setBorder()で、元のBorder`の外側に余白を指定 - `
WindowsLookAndFeel`で余計な枠が表示される?
- `
その他にも、以下のように余白を設定する方法もありますが、`LookAndFeel`によって対応が異なるようです。
UIManager.put("ComboBox.padding", new InsetsUIResource(insets));
上記のサンプルを、余白に色無しにして、`Ubuntu 7.04(GNOME 2.18.1)、JDK 1.6.0`で実行すると、以下のようになります。
- `
LookAndFeel毎にJComboBox`の余白の描画は異なるみたいなので、全部まとめて消すのは難しい? - `
BasicComboBoxUIも、ComboBox.buttonDarkShadowがArrowButton`の三角とボタンの影に使われていて微妙- `
BasicComboBoxUI#createArrowButton()`をオーバーライドして別途三角形アイコンを使う方がよさそう
- `
コードは、JComboBoxのBorderを変更するに移動。
参考リンク
コメント
なんだか、よく分からなくなってきましたorz。-- aterai- `
JDK 1.6.0_10-beta-b22で、BasicComboBoxUIのpadding`にすこし修正が入っている?ようです。
- `
- `
L&F`の切り替えなどを追加しました。 -- aterai - `
1.7.0_06でNimbusなどのComboBox.popupInsets`が修正? Bug ID: 7158712 Synth Property "ComboBox.popupInsets" is ignored -- aterai

