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)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JComboBoxの内余白 #navi(../) #tags() #tags(JComboBox, Border, LookAndFeel, JTextField) RIGHT:Posted by &author(aterai); at 2007-05-28 *JComboBoxの内余白 [#s9f3687d] JComboBoxのエディタなどに内余白を設定します。 ``JComboBox``のエディタなどに内余白を設定します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTQv1E_b9I/AAAAAAAAAgE/nxvnwwFoDyU/s800/PaddingComboBox.png) **サンプルコード [#o79d2c4d] #code(link){{ Border padding = BorderFactory.createEmptyBorder(0,5,0,0); ListCellRenderer lcr = combo.getRenderer(); ((JLabel)lcr).setBorder(padding); combo.setRenderer(lcr); }} **解説 [#ra0eef84] 上記のサンプルでは、JComboBox に、Border((チェックボックスで、EmptyBorderとMatteBorder切り替えることで、余白などを可視化することができます))を設定したListCellRendererを設定して、ドロップダウンリストの左余白をすこし広げています。 JComboBoxが編集不可の場合、エディタ部分もこの余白が自動的に適用されます。 上記のサンプルでは、``JComboBox``に、``Border``(``EmptyBorder``と``MatteBorder``を切り替え可能)を設定した``ListCellRenderer``を設定して、ドロップダウンリストの左余白をすこし広げています。``JComboBox``が編集不可の場合、エディタ部分もこの余白が自動的に適用されます。 -0:編集不可 -- ListCellRendererで余白を指定 -``0``:編集不可 -- ``ListCellRenderer``で余白を指定 ---- 以下は、JComboBoxが編集可の場合のテストです。 以下は、``JComboBox``が編集可の場合のテストです。 -1: テキストフィールドの元Border + 任意のBorderで余白を設定 -- editor.setBorder(BorderFactory.createCompoundBorder(editor.getBorder(), padding)); -- JComboBox#getEditor()#getEditorComponent()で取得したJTextFieldに余白を指定 -- JDK 1.5 では余白を指定しても反映されない -- JDK 1.6 では取得したJTextFieldをsetOpaque(true)としないと背景色は反映されない -``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に余白を指定 -- Metal L&F でテキストフィールドの枠が描画できない -``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)); -- Metal, Motif, Windows L&F などでは無効 -- Nimbus L&F では有効だが、JComboBoxの高さなども変化してしまう -``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)); -- Metal, Motif, Windows L&F などでは無効 -- Nimbus L&F では有効 -``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の内側に余白を指定 -- Windows, Motif L&F で有効? -- Metal, Nimbus L&F では、JComboBoxの外側に余白が付く -``5``: ``JComboBoxのBorder`` + 任意の``Border``で余白を``JComboBox``自身に設定 -- ``JComboBox#setBorder()``で、元の``Border``の内側に余白を指定 -- ``WindowsLookAndFeel``, ``MotifLookAndFeel``で有効? -- ``MetalLookAndFeel``, ``NimbusLookAndFeel``では、``JComboBox``の外側に余白が付く -6: JComboBoxのBorder + 任意のBorderで余白をJComboBox自身に設定 -- JComboBox#setBorder()で、元のBorderの外側に余白を指定 -- Windows L&F で余計な枠が表示される? -``6``: ``JComboBox``の``Border`` + 任意の``Border``で余白を``JComboBox``自身に設定 -- ``JComboBox#setBorder()``で、元の``Border``の外側に余白を指定 -- ``WindowsLookAndFeel``で余計な枠が表示される? ---- //以下のようにエディタに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) が使用できる? //--無視されるのは、Basic L&F系(Windows L&Fなど)で、Synth L&F系(Nimbus, GTK L&Fなど)では上記の設定は有効になる? //--``1.6.0_10-beta-b13``では、%%``BasicLookAndFeel``系は%% どちらも、``UIManager.put("ComboBox.padding", insets)``が使用できる? その他にも、以下のように余白を設定する方法もありますが、L&F によって対応が異なるようです。 その他にも、以下のように余白を設定する方法もありますが、``LookAndFeel``によって対応が異なるようです。 #code{{ UIManager.put("ComboBox.padding", new InsetsUIResource(insets)); }} ---- 上記のサンプルを、余白に色無しにして、Ubuntu 7.04(GNOME 2.18.1) JDK 1.6.0 で実行すると、以下のようになります。 上記のサンプルを、余白に色無しにして、``Ubuntu 7.04``(``GNOME 2.18.1``)、``JDK 1.6.0``で実行すると、以下のようになります。 //#screenshot(,screenshot1.png) #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTQyV_2TnI/AAAAAAAAAgI/yqGoi_zqsgI/s800/PaddingComboBox1.png) ---- - Look&Feel毎にJComboBoxの余白の描画は異なるみたいなので、全部まとめて消すのは難しい? - BasicComboBoxUI も、ComboBox.buttonDarkShadow がArrowButtonの三角とボタンの影に使われていて微妙 -- BasicComboBoxUI#createArrowButton()をオーバーライドして別途三角形アイコンを使う方がよさそう - ``LookAndFeel``毎に``JComboBox``の余白の描画は異なるみたいなので、全部まとめて消すのは難しい? - ``BasicComboBoxUI``も、``ComboBox.buttonDarkShadow``が``ArrowButton``の三角とボタンの影に使われていて微妙 -- ``BasicComboBoxUI#createArrowButton()``をオーバーライドして別途三角形アイコンを使う方がよさそう コードは、[[JComboBoxのBorderを変更する>Swing/ComboBoxBorder]]に移動。 **参考リンク [#w8434b1f] -[[JComboBoxにアイコンを表示>Swing/IconComboBox]] -[http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4515838 Bug ID: 4515838 Can't change the border of a JComboBox] **コメント [#df84d3cd] - %%なんだか、よく分からなくなってきましたorz。%% -- [[aterai]] &new{2008-03-11 (火) 21:38:58}; -- JDK 1.6.0_10-beta-b22 で、BasicComboBoxUIのpaddingにすこし修正が入っている?ようです。 - L&F の切り替えなどを追加しました。 -- [[aterai]] &new{2008-04-02 (水) 20:08:01}; - 1.7.0_06 でNimbusなどのComboBox.popupInsetsが修正? [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7158712 Bug ID: 7158712 Synth Property "ComboBox.popupInsets" is ignored] -- [[aterai]] &new{2012-08-15 (水) 13:58:34}; -- ``JDK 1.6.0_10-beta-b22``で、``BasicComboBoxUI``の``padding``にすこし修正が入っている?ようです。 - ``L&F``の切り替えなどを追加しました。 -- [[aterai]] &new{2008-04-02 (水) 20:08:01}; - ``1.7.0_06``で``Nimbus``などの``ComboBox.popupInsets``が修正? [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7158712 Bug ID: 7158712 Synth Property "ComboBox.popupInsets" is ignored] -- [[aterai]] &new{2012-08-15 (水) 13:58:34}; #comment