JScrollPane Установить положение прокрутки
У меня есть следующий фрагмент кода
query_area = new JTextArea("");
query_scroll_pane = new JScrollPane(query_area);
query_scroll_pane.setSize(1000,80);
query_scroll_pane.setLocation(10,10);
query_panel.add(query_scroll_pane);
который добавляет мою текстовую область в область прокрутки. Теперь в методе я динамически устанавливаю текст для textarea как
sf.query_area.setText("Query "+(sf.query_counter)+sf.query_store[sf.query_counter]);
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());
Теперь мой запрос - когда отображается более длинный текст, появляются полосы прокрутки, но system.out.println печатает положение полосы прокрутки как 0, а не как увеличенное значение.
Почему так??
2 ответа
Единственная причина, по которой я могу думать, это то, что позиция порта просмотра не изменилась.
Первое, что приходит на ум, это то, что порт представления, возможно, еще не отреагировал на изменение позиции из начального набора текста, поэтому вывод результата сразу после установки текста отражает текущее состояние полосы прокрутки (который еще не начал обновляться)
Вы могли бы попробовать
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());
}
});
вместо этого и посмотрите, выводит ли это более актуальное значение
Альтернативно, вы можете добавить AdjustmentListener
на полосу прокрутки, которая будет уведомлять, когда происходят изменения JScrollBar#addAdjustmentListener
Теперь мой запрос - когда отображается более длинный текст, появляются полосы прокрутки, но system.out.println печатает положение полосы прокрутки как 0, а не как увеличенное значение.
использование
query_area = new JTextArea();
DefaultCaret caret = (DefaultCaret) query_area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);