2013-08-02 3 views
1

Я выполняю некоторую работу с таблицей, содержащейся в панели прокрутки. Функция, которую я вызываю, выполняет операцию над таблицей, а затем перерисовывает таблицу, которая изменяет положение вертикальной полосы прокрутки. Я пытаюсь найти способ восстановить начальную позицию полосы прокрутки после функции. Вот пример того, что я до сих пор: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). не

Спасибо за помощь

+1

table.scrollRectToVisible - если это не делает что вы хотите, показать SSCCE, который демонстрирует проблему/что вы делаете – kleopatra

+0

Для [пример] (http://stackoverflow.com/a/14429388/230513). – trashgod

ответ

0

Для прокрутки назад к вершине, это ничего:

JscrollPane.getVerticalScrollBar.setValue() 

Вы должны использовать:

TextComponent.setCaretPosition() 

Вместо:

JTable.scrollRectToVisible()