Swing/InactiveSpinnerInsets のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/InactiveSpinnerInsets へ行く。
  - 1 (2012-12-28 (金) 12:36:40)
- 2 (2013-09-19 (木) 19:40:10)
- 3 (2015-03-03 (火) 14:10:51)
- 4 (2016-05-27 (金) 16:02:04)
- 5 (2017-08-16 (水) 17:30:15)
- 6 (2018-08-24 (金) 13:47:55)
- 7 (2020-08-18 (火) 05:08:19)
- 8 (2022-01-14 (金) 08:00:07)
- 9 (2025-01-03 (金) 08:57:02)
- 10 (2025-01-03 (金) 09:01:23)
- 11 (2025-01-03 (金) 09:02:38)
- 12 (2025-01-03 (金) 09:03:21)
- 13 (2025-01-03 (金) 09:04:02)
- 14 (2025-06-19 (木) 12:41:37)
- 15 (2025-06-19 (木) 12:43:47)
- 16 (2025-09-15 (月) 08:14:36)
 
- title: JSpinnerを編集不可にした場合の内余白 tags: [JSpinner, JTextField, Border, UIManager, LookAndFeel] author: aterai pubdate: 2010-08-23T15:50:45+09:00 description: JSpinnerを編集不可にした場合の背景色や内部余白の色などを変更します。
概要
JSpinnerを編集不可にした場合の背景色や内部余白の色などを変更します。
Screenshot

Advertisement
サンプルコード
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();
      }
    }
  }
};
解説
- 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を設定している。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()をオーバーライドして,- WindowsLookAndFeel(XP)の場合表示される余白(背景色)を- UIManager.getColor("FormattedTextField.inactiveBackground")で塗りつぶしている。
- JSpinner#paintChildren()をオーバーライドして,- WindowsLookAndFeel(XP)の場合表示されるボタン周りの白い余白を塗りつぶしている。