Обновление JTextArea в Java - PullRequest
       33

Обновление JTextArea в Java

0 голосов
/ 01 января 2012

В моей программе я загружаю JTextArea для отображения некоторого текста при нажатии кнопки. Я добавил ActionListener и написал метод loadQuestion(), но по какой-то причине компонент не обновляется. Компонент содержится в другом файле, доступ к которому осуществляется с помощью методов get() и set(). Я запустил методы repaint() и revalidate() в методе loadQuestion () и снова в методе setTextArea(), но он все еще не работает !! Любые указатели будут оценены - заранее спасибо

public void loadQuestion () {
    JTextArea tempArea = quizDisplay.getTextArea();
    String text = "Hello World!!";
    tempArea.append("Hi");
    quizDisplay.setTextArea(tempArea);
    quizDisplay.revalidate();
    quizDisplay.repaint();

}

1 Ответ

6 голосов
/ 01 января 2012

Обычно, когда вы добавляете некоторый текст к видимому JTextArea, нет необходимости вызывать revalidate или repaint самостоятельно. JTextArea знает, что оно было изменено, и позаботится о его перекрашивании. Также нет необходимости заново устанавливать текстовую область.

Кроме того, все операции, связанные с Swing, должны выполняться в EDT (Thread Dispatch Thread).

Таким образом, ваш код будет выглядеть как

public void loadQuestion () {
    JTextArea tempArea = quizDisplay.getTextArea();
    tempArea.append("Hi");
}

и метод loadQuestion должны вызываться в EDT, что обычно происходит при вызове из ActionListener при нажатии кнопки.

В учебнике Swing приведен пример с использованием 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...