Swing/InactiveSpinnerInsets のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- 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:
概要
JSpinner
を編集不可にした場合の背景色や内部余白の色などを変更します。
Screenshot
Advertisement
サンプルコード
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();
}
}
}
};
View in GitHub: Java, Kotlin解説
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)
の場合表示されるボタン周りの白い余白を塗りつぶしている