在我的程序中,我加载JTextArea
以在单击按钮时显示一些文本。我添加了ActionListener
并编写了loadQuestion()
方法,但由于某种原因,组件未更新。该组件包含在另一个文件中,我通过get()
和set()
方法访问该文件。我在loadQuestion()方法中运行repaint()
和revalidate()
方法,并在setTextArea()
方法中再次运行,但它似乎仍然无效!任何指针将不胜感激 - 提前感谢
public void loadQuestion () {
JTextArea tempArea = quizDisplay.getTextArea();
String text = "Hello World!!";
tempArea.append("Hi");
quizDisplay.setTextArea(tempArea);
quizDisplay.revalidate();
quizDisplay.repaint();
}
答案 0 :(得分:6)
通常,当您向可见的JTextArea
附加一些文字时,无需亲自致电revalidate
或repaint
。 JTextArea
知道它已被更改,并将照顾它的重绘。
也无需再次设置文本区域。
此外,所有与Swing相关的操作都应该在EDT(事件调度线程)上进行。
所以你的代码最终看起来像
public void loadQuestion () {
JTextArea tempArea = quizDisplay.getTextArea();
tempArea.append("Hi");
}
并且应该在EDT上调用loadQuestion
方法,这通常是在按下按钮时从ActionListener
调用它的情况。
查看Swing tutorial以获取using a JTextArea的示例,其中它们或多或少相同(来自我链接的源代码的引用)
public void actionPerformed(ActionEvent evt) {
String text = textField.getText();
textArea.append(text + newline);
textField.selectAll();
//Make sure the new text is visible, even if there
//was a selection in the text area.
textArea.setCaretPosition(textArea.getDocument().getLength());
}