2014-09-23 43 views
0

我知道這個問題以前可能已經被問過了,但我無法通過解決這個問題,並希望我們能夠爲一個有點棘手的接口提供完整的答案。在重新驗證之後將垂直滾動設置爲當前位置

GUI可以描述如下: 應用程序擴展了JFrame。應用程序添加一個JPanel mPanel。 mPanel添加一個包含擴展JPanel的MoviePanel的JScrollPane ml。

JScrollPane ml具有垂直滾動功能。我的目標是,一旦MoviePanel的內容發生變化,並在其上運行revalidate(),滾動窗格就不應該像當前那樣滾動到底部。相反,我希望它能夠在改變到MoviePanel之前滾動到它所處的位置。賦予它永遠不會滾動的感覺。

我試圖手動設置滾動位置我運行重新驗證()方法後:

removeAll(); // Removes all components from the JPanel MoviePanel 
add(mList()); // Adds a bunch of content (other JPanels) to MoviePanel 
revalidate(); 
ml.getVerticalScrollBar().setValue(0); // Scroll to top (don't work) - and I'd like this value to be the position of the scroll before these lines started to run 

但似乎真的沒有做任何事情。

如果有人能幫助我,我會很感激!

回答

0

滾動代碼添加到SwingUtilities.invokeLater:

SwingUtilities.invokeLater(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     ml.getVerticalScrollBar().setValue(0); 
    } 
}); 
相關問題