Swing/InactiveSpinnerInsets のバックアップ差分(No.2)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/InactiveSpinnerInsets へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JSpinnerを編集不可にした場合の内余白 #navi(../) #tags() #tags(JSpinner, JTextField, Border, UIManager, LookAndFeel) RIGHT:Posted by &author(aterai); at 2010-08-23 *JSpinnerを編集不可にした場合の内余白 [#lebad6b3] JSpinnerを編集不可にした場合の背景色や内部余白の色などを変更します。 * JSpinnerを編集不可にした場合の内余白 [#lebad6b3] ``JSpinner``を編集不可にした場合の背景色や内部余白の色などを変更します。 -&jnlp; -&jar; -&zip; - &jnlp; - &jar; - &zip; //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTOcTAKgdI/AAAAAAAAAcY/R1dvME0C6UA/s800/InactiveSpinnerInsets.png) #ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTOcTAKgdI/AAAAAAAAAcY/R1dvME0C6UA/s800/InactiveSpinnerInsets.png) **サンプルコード [#v60468c2] ** サンプルコード [#v60468c2] #code(link){{ JSpinner spinner3 = new JSpinner() { @Override protected void paintComponent(Graphics g) { if (getUI() instanceof com.sun.java.swing.plaf.windows.WindowsSpinnerUI) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setPaint(isEnabled()?UIManager.getColor("FormattedTextField.background") :UIManager.getColor("FormattedTextField.inactiveBackground")); g2d.fillRect(0,0,getWidth(),getHeight()); g2d.dispose(); } } @Override protected void paintChildren(Graphics g) { super.paintChildren(g); if (getUI() instanceof com.sun.java.swing.plaf.windows.WindowsSpinnerUI) { if (!isEnabled()) { Graphics2D g2d = (Graphics2D) g.create(); Rectangle r = getComponent(0).getBounds(); r.add(getComponent(1).getBounds()); r.width--; r.height--; g2d.setPaint(UIManager.getColor("FormattedTextField.inactiveBackground")); g2d.draw(r); g2d.dispose(); } } } }; }} **解説 [#qfc7e655] -Default --WindowsLnf(XP)の場合、JSpinnerを編集不可にしても白い余白が表示される。 -setOpaque(false) --JSpinner#getEditor()で取得したJSpinner.DefaultEditorと、JSpinner.DefaultEditor#getTextField()で取得したJTextFieldをそれぞれ、setOpaque(false)としている。 --WindowsLnf(XP)で、JSpinnerを編集不可にしても背景色は白いままになる。 --UIManager.put("FormattedTextField.inactiveBackground", Color.WHITE); -setBorder(...) --上記と同様に取得したJSpinner.DefaultEditor(=JPanel)とJTextFieldに以下のようなWindowsLnf(XP)用のBorderを設定している。 ** 解説 [#qfc7e655] - ``Default`` -- ``WindowsLookAndFeel(XP)``の場合、``JSpinner``を編集不可にしても白い余白が表示される。 - ``setOpaque(false)`` -- ``JSpinner#getEditor()``で取得した``JSpinner.DefaultEditor``と、``JSpinner.DefaultEditor#getTextField()``で取得した``JTextField``をそれぞれ、``setOpaque(false)``としている。 -- ``WindowsLookAndFeel(XP)``で、``JSpinner``を編集不可にしても背景色は白いままになる。 -- ``UIManager.put("FormattedTextField.inactiveBackground", Color.WHITE);`` - ``setBorder(...)`` -- 上記と同様に取得した``JSpinner.DefaultEditor``(=``JPanel``)と``JTextField``に以下のような``WindowsLookAndFeel(XP)``用の``Border``を設定している。 #code{{ JSpinner spinner2 = new JSpinner(); spinner2.setBorder(BorderFactory.createEmptyBorder()); JSpinner.DefaultEditor editor2 = (JSpinner.DefaultEditor)spinner2.getEditor(); editor2.setBorder(BorderFactory.createMatteBorder(1,1,1,0, new Color(127,157,185))); JTextField field2 = editor2.getTextField(); field2.setBorder(BorderFactory.createEmptyBorder(2,2,2,0)); }} -paintComponent, paintChildren --JSpinner#paintComponent()をオーバーライドして, WindowsLnf(XP)の場合表示される余白(背景色)をUIManager.getColor("FormattedTextField.inactiveBackground")で塗りつぶしている。 --JSpinner#paintChildren()をオーバーライドして, WindowsLnf(XP)の場合表示されるボタン周りの白い余白を塗りつぶしている。 **参考リンク [#l3dbec88] -[http://java.sun.com/products/jfc/tsc/articles/painting/ Painting in AWT and Swing] - ``paintComponent, paintChildren`` -- ``JSpinner#paintComponent()``をオーバーライドして, ``WindowsLookAndFeel(XP)``の場合表示される余白(背景色)を``UIManager.getColor("FormattedTextField.inactiveBackground")``で塗りつぶしている。 -- ``JSpinner#paintChildren()``をオーバーライドして, ``WindowsLookAndFeel(XP)``の場合表示されるボタン周りの白い余白を塗りつぶしている。 **コメント [#m68ec79a] ** 参考リンク [#l3dbec88] - [http://java.sun.com/products/jfc/tsc/articles/painting/ Painting in AWT and Swing] ** コメント [#m68ec79a] #comment