java - 在 Windows LAF 下为每个组件的 JTextField 设置非 Activity 背景颜色

标签 java swing jtextfield look-and-feel

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

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

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

最佳答案

我找到了一个解决方案。这不是一个很好的解决方案,但仍然是一个解决方案:

扩展 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);
  }
}

关于java - 在 Windows LAF 下为每个组件的 JTextField 设置非 Activity 背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429927/

相关文章:

java - 如何在 Linux 上安装 Java 开发环境(JDK、Maven、IDE、...) VirtualBox

java - 如何从另一个java应用程序运行一个java应用程序并在主程序返回后保持运行?

java - 如何在 java swing 中创建可调整大小的矩形?

java - 尝试连接到串行端口时使用 javax.swing.SwingWorker 时出现问题

java - 将 JTextArea 嵌入到 JMenuItem 中

java - invokeAll 可以在 RecursiveTask 中使用吗?

java - 假设变量无法解析为变量?

java - GUI Jlist 项目监听器

java - 如何操作粘贴到 JTextField 中但不输入的文本?

java - 如何在java中将两个文本字段放置为一个视口(viewport)?