在 Windows LAF 下为每个组件的 JTextField 设置非活动背景颜色
Set inactive background color on JTextField per-component under Windows LAF
我想在每个组件 的基础上设置 JTextField 的非活动背景颜色。 (调用 setEditable(false)
时显示非活动颜色)。
通话中
UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.YELLOW));
设置非活动颜色 application-wide.
可以在 Nimbus LAF 下完成,如此处所述:http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/package-summary.html。使用 Windows LAF 时可以做类似的事情吗?
我找到了解决办法。不是一个很好的解决方案,但仍然是一个解决方案:
扩展 JTextField class 并覆盖 paintComponent 方法以绘制所需颜色的矩形。
class CustomTextField extends JTextField {
private Color inactiveColor = UIManager.getColor("TextField.inactiveBackground");
public void setDisabledBackgroundColor(Color inactiveColor) {
this.inactiveColor = inactiveColor;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
if (!isEditable() || !isEnabled()) {
setOpaque(false);
g.setColor(inactiveColor);
g.fillRect(0, 0, getWidth(), getHeight());
} else {
setOpaque(true);
}
super.paintComponent(g);
}
}
我想在每个组件 的基础上设置 JTextField 的非活动背景颜色。 (调用 setEditable(false)
时显示非活动颜色)。
通话中
UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.YELLOW));
设置非活动颜色 application-wide.
可以在 Nimbus LAF 下完成,如此处所述:http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/package-summary.html。使用 Windows LAF 时可以做类似的事情吗?
我找到了解决办法。不是一个很好的解决方案,但仍然是一个解决方案:
扩展 JTextField class 并覆盖 paintComponent 方法以绘制所需颜色的矩形。
class CustomTextField extends JTextField {
private Color inactiveColor = UIManager.getColor("TextField.inactiveBackground");
public void setDisabledBackgroundColor(Color inactiveColor) {
this.inactiveColor = inactiveColor;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
if (!isEditable() || !isEnabled()) {
setOpaque(false);
g.setColor(inactiveColor);
g.fillRect(0, 0, getWidth(), getHeight());
} else {
setOpaque(true);
}
super.paintComponent(g);
}
}