setForeground()不能在JTextArea上工作

时间:2018-04-23 23:20:09

标签: java swing 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。

我做错了什么?为什么前景色不会变为红色?

1 个答案:

答案 0 :(得分:2)

因此,您的基本问题是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 - 但是在您添加了所有组件后再进行操作