setForeground() 不适用于 JTextArea

setForeground() not working on JTextArea

我有以下方法:

    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。

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

所以,您的基本问题是 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)

将组件添加到 window 时,请在使其可见之前添加它们,这将使您不必再次重新验证容器。

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

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