在Java中更新JTextArea

时间:2011-12-31 20:19:50

标签: java swing jtextarea repaint

在我的程序中,我加载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();

}

1 个答案:

答案 0 :(得分:6)

通常,当您向可见的JTextArea附加一些文字时,无需亲自致电revalidaterepaintJTextArea知道它已被更改,并将照顾它的重绘。 也无需再次设置文本区域。

此外,所有与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());
}