【问题标题】:setForeground() not working on JTextAreasetForeground() 不适用于 JTextArea
【发布时间】:2018-04-23 23:20:08
【问题描述】:

我有以下方法:

    static void display() {
    String data = "";
    try {
        input = new Scanner(file);
        while (input.hasNext()) {
            data += input.nextLine() + "\n";
        }
        frame = new JFrame();
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        text = new JTextArea();
        text.setForeground(Color.red);
        sp = new JScrollPane(text);
        text.setFont(new Font("Arial", Font.PLAIN, 20));
        text.setOpaque(true);
        text.setVisible(true);
        text.setEnabled(false);
        text.setSize(200, 200);
        text.setText(data);
        sp.setVisible(true);
        frame.add(sp);
        frame.validate();

    } catch (FileNotFoundException ex) {
        Logger.getLogger(Score.class.getName()).log(Level.SEVERE, null, ex);
    }

}
public static void main(String[] args){
    display();
}

现在当我运行文件时,我看到了:

Screenshot showing how the text is a weird blue instead of red

尽可能远离指定的 Color.red。

我做错了什么?为什么前景色没有变成红色?

【问题讨论】:

  • 我的猜测是颜色被外观和感觉委托覆盖(可能从外观上看是灵气)
  • 我有其他框架和面板工作得很好。只有这个有这个问题。
  • (1-) Only this one is having this issue. - 然后您已经向自己证明了该方法有效。这段代码和工作代码有什么区别?编程是关于解决问题的。告诉我们有什么区别。不要让我们猜测有什么区别。然后我们可以提供解决方案。
  • 没有区别。两个框架的初始化方式相同。它们只是在不同的类中。

标签: java swing jtextarea


【解决方案1】:

所以,你的基本问题是text.setEnabled(false),它会改变文本颜色。请改用setEditable

JFrame frame = new JFrame();
//frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
JTextArea text = new JTextArea();
text.setForeground(Color.red);
JScrollPane sp = new JScrollPane(text);
text.setFont(new Font("Arial", Font.PLAIN, 20));
text.setEditable(false);
//text.setEnabled(false);
//text.setSize(200, 200);
text.setText("Happy bunies");
frame.add(sp);
//sp.setVisible(true);
frame.setVisible(true);

Swing 组件已经可见,因此需要继续在它们上调用setVisible(true)

向窗口添加组件时,在使其可见之前添加它们,这样您就不必再次重新验证容器。

在组件上调用setSize 是无关紧要的,它们在布局管理器API 的控制之下。如果要影响JTextArea 的大小,请使用setRowssetColumns 方法(也可以通过构造函数)。

我还考虑在框架上使用 pack 而不是 setSize - 但在添加所有组件之后再做

【讨论】:

  • 工作。谢谢。
  • 我真的不记得添加那行了。当然它没有工作。我知道 setForegeround 对 disabled 没有影响,但我只是没有看到我已禁用它。
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2017-07-25
  • 1970-01-01
  • 2023-03-11
  • 2012-04-23
相关资源
最近更新 更多