Я выполняю некоторую работу с таблицей, содержащейся в панели прокрутки. Функция, которую я вызываю, выполняет операцию над таблицей, а затем перерисовывает таблицу, которая изменяет положение вертикальной полосы прокрутки. Я пытаюсь найти способ восстановить начальную позицию полосы прокрутки после функции. Вот пример того, что я до сих пор:JScrollPane get/set value
public void lineCopy(){
scrollPosition = jScrollPane1.getVerticalScrollBar().getValue;
//Main body of tableCopy function here, including call to
//getNewTable() which gets the new table
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
jScrollPane1.getVerticalScrollBar().setValue(scrollPosition);
System.out.println("Run Later Here");
}
});
System.out.println("End of copy function");
}
Проблема заключается в том полоса прокрутки не сбрасывается до значения, которое он имел до функции, как правило, прокручивается дальше вниз окна, чем раньше (например, если линия 200 находился в верхней части окна перед функцией, строка 250 находится сверху).
Вот что я знаю: InvokeLater действительно вызывает позже на основе выделенных строк системы. Также я знаю, что функция setValue работает, потому что, если я устанавливаю ее в setValue (0) вместо setValue (scrollPosition), она работает каждый раз.
Дополнительная информация: Я пробовал аналогичный код с помощью получения/настройки видовых экранов и получил аналогичные результаты. Кроме того, некоторые строки имеют разную высоту, основанную на типе значения в строке (матрица vs constant). не
Спасибо за помощь
table.scrollRectToVisible - если это не делает что вы хотите, показать SSCCE, который демонстрирует проблему/что вы делаете – kleopatra
Для [пример] (http://stackoverflow.com/a/14429388/230513). – trashgod