Динамично обновите JTextArea, поскольку обработка происходит?

Перемещение Grid.Row = "1" из StackPanel в ScrollViewer полностью разрешило его для меня.

У меня был длинный список из примерно 40 предметов, которые можно было бы показать в StackPanel, но показывали только первые 20 .

    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
        <StackPanel x:Name="ContentPanel" Margin="12,0,12,0">
        <TextBlock Text="{Binding Line1}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        <TextBlock Text="" Margin="10,-2,10,0" Style="{StaticResource PhoneTextNormalStyle}" />
        ...
        </StackPanel>
    </ScrollViewer>
23
задан Michael Myers 10 March 2009 в 16:00
поделиться

5 ответов

Я столкнулся с той же проблемой с моим заявлением. У меня была кнопка «Выполнить» моего приложения, которая выполняла некоторые действия и выводила результаты в JTextArea. Я должен был вызвать метод из потока. Вот что я сделал.

У меня есть несколько переключателей действий, которые можно выполнить, и затем одна кнопка «Выполнить», чтобы выполнить это конкретное действие. У меня есть действие под названием Validate. Поэтому, когда я проверяю этот переключатель и нажимаю кнопку «Выполнить», он вызывает метод validate (). Поэтому я сначала поместил этот метод во внутренний класс, который реализовал Runnable

class ValidateThread implements Runnable {
    public void run() {
        validate();
    }
}

. Затем я вызвал этот поток в ActionListener кнопки «Выполнить» следующим образом

runButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        // Some code checked on some radio buttons
        if(radioButton.isSelected()) {
            if(radioButton.getText().equals("VALIDATE")) {
               Runnable runnable = new ValidateThread();
               Thread thread = new Thread(runnable);
               thread.start();
            }
        }
    }

});

Вуаля! Вывод теперь отправляется в JTextArea.

Теперь вы заметите, что JTextArea не будет прокручиваться вниз с текстом. Поэтому вам нужно установить позицию каретки, как

textArea.setCaretPosition(textArea.getText().length() - 1);

Теперь, когда данные добавляются в JTextArea, они всегда будут прокручиваться вниз.

24
ответ дан Ascalonian 29 November 2019 в 00:59
поделиться

Как уже говорили другие, это требует многопоточности. Взгляните на Параллельность в Swing .

Одним из решений было бы реализовать обработку с использованием SwingWorker. Метод doInBackground реализует обработку, и вы вызываете метод publish со строкой, которая будет добавлена ​​в качестве аргумента. Затем ваш SwingWorker переопределит метод процесса, чтобы получить аргумент String и добавить его в текстовую область.

4
ответ дан Mark 29 November 2019 в 00:59
поделиться

Для этого вам понадобится многопоточность. Готовы окунуться?

0
ответ дан Spencer Ruport 29 November 2019 в 00:59
поделиться

Если это - многопоточность, Вы должны попробовать это! http://www.devarticles.com/c/a/Java/Multithreading-in-Java/

0
ответ дан binarycreations 29 November 2019 в 00:59
поделиться

Попробуйте следующее:

jTextArea.update(jTextArea.getGraphics());
40
ответ дан 29 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: