我有以下方法:
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。
我做错了什么?为什么前景色不会变为红色?
答案 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
的大小,请使用setRows
和setColumns
方法(也可以通过构造函数)。
我还考虑在框架上使用pack
而不是setSize
- 但是在您添加了所有组件后再进行操作