在Windows LAF下,在每个组件的JTextField上设置非活动背景颜色

时间:2015-07-15 12:05:34

标签: java swing jtextfield look-and-feel

我想在每个组件的基础上设置JTextField的非活动背景颜色。 (调用setEditable(false)时显示非活动颜色。)

调用
UIManager.put("TextField.inactiveBackground", new ColorUIResource(Color.YELLOW));
设置非活动颜色应用程序范围

可以在Nimbus LAF下完成,如此处记录的那样:http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/package-summary.html。使用Windows LAF时可以做类似的事情吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。不是一个美丽的解决方案,但仍然是一个解决方案:

扩展JTextField类并覆盖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);
  }
}