JScrollPane прокручивает вниз с длинным текстом в JEditorPane - PullRequest
4 голосов
/ 14 марта 2010

Я хочу иметь JEditorPane внутри JScrollPane. Когда пользователь нажимает кнопку, слушатель щелчка создаст textEditor, вызовет jscrollpane.setViewPort (textEditor), вызовет textEditor.setText (String), чтобы заполнить его редактируемым текстом, и вызовет jscrollpane.getVerticalScrollBar (). SetValue (0). Если вам интересно, да, setText () должен идти после setViewPort () по причинам, не относящимся к теме.

Вот проблема: после того, как пользователь нажимает кнопку, представление JScrollPane прокручивается до самого дна. Я хочу, чтобы полоса прокрутки была наверху, в соответствии с последней строкой в ​​моем прослушивателе кликов.

Я открыл отладчик и, к своему ужасу, обнаружил, что область просмотра jscrollpane принудительно опускается вниз после завершения прослушивателя щелчков (при прокачке фильтров). Похоже, что Swing задерживает заполнение редактора / jscrollpane до тех пор, пока не закончится список щелчков, но сначала вызывает команду полосы прокрутки. Таким образом, нежелательное поведение.

В любом случае, мне интересно, есть ли чистое решение? Кажется, что требование прокручивания области прокрутки к вершине после модификации было бы достаточно распространенным требованием, поэтому я предполагаю, что это хорошо решенная проблема.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 марта 2010

Вы можете использовать JEditorPane.setCaretPosition(0).

1 голос
/ 14 марта 2010

Ладно, меня удивляет, как я всегда узнаю доли секунды ответа после публикации.

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        pane.getVerticalScrollBar().setValue(0);
    }
});

Это позволяет отложить действие прокрутки до завершения другой задачи. Вопрос: это хороший стиль / надежный или это просто состояние гонки? Могу ли я зависеть от этой работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...