Swing/InactiveSpinnerInsets の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/InactiveSpinnerInsets へ行く。
- Swing/InactiveSpinnerInsets の差分を削除
---
category: swing
folder: InactiveSpinnerInsets
title: JSpinnerを編集不可にした場合の内余白
tags: [JSpinner, JTextField, Border, UIManager, LookAndFeel]
author: aterai
pubdate: 2010-08-23T15:50:45+09:00
description: JSpinnerを編集不可にした場合の背景色や内部余白の色などを変更します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTOcTAKgdI/AAAAAAAAAcY/R1dvME0C6UA/s800/InactiveSpinnerInsets.png
---
* Summary [#summary]
`JSpinner`を編集不可にした場合の背景色や内部余白の色などを変更します。
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTOcTAKgdI/AAAAAAAAAcY/R1dvME0C6UA/s800/InactiveSpinnerInsets.png)
* Source Code Examples [#sourcecode]
#code(link){{
JSpinner spinner3 = new JSpinner() {
@Override protected void paintComponent(Graphics g) {
if (getUI() instanceof 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();
}
}
}
};
}}
* Description [#description]
- `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()`をオーバーライドして`WindowsLookAndFeel(XP)`の場合表示される余白(背景色)を`UIManager.getColor("FormattedTextField.inactiveBackground")`で塗りつぶしている
-- `JSpinner#paintChildren()`をオーバーライドして`WindowsLookAndFeel(XP)`の場合表示されるボタン周りの白い余白を塗りつぶしている
* Reference [#reference]
- [http://www.oracle.com/technetwork/java/painting-140037.html Painting in AWT and Swing]
- [[JSpinner内で使用するEditorの縁を描画する>Swing/SpinnerEditorBorderPainted]]
* Comment [#comment]
#comment
#comment