2014-02-13 65 views
0

我想同時滾動兩個Jtables。每個JTable放置在JScrollpane上,並且兩個JScrollpanes都設置在JSplitpane上。這裏滾動的relöevant代碼:Simultaniously滾動2個JTables?

teststepScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     rerouteScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     teststepScrollPane.getVerticalScrollBar().setModel(
       rerouteScrollPane.getVerticalScrollBar().getModel()); 

........ 

public void setTeststepTableFocus(final int teststep) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       if (teststep <= teststepTable.getModel().getRowCount() - 1){ 
        teststepTable.setRowSelectionInterval(teststep, teststep); 
        teststepTable.scrollRectToVisible(new Rectangle(teststepTable.getCellRect(teststep, 0, true))); 
       } 
      } 
     }); 
    } 

可悲的是它根本不起作用。有任何想法嗎?謝謝你的幫助。

回答

0

這裏是我會做什麼:

步驟1:訪問面板的滾動條:

JScrollBar verticalBar1 = teststepScrollPane.getVerticalScrollBar(); 
JScrollBar verticalBar2 = rerouteScrollPane.getVerticalScrollBar(); 

第2步:添加AdjustmentListeners這兩個滾動條:

verticalBar1.addAdjustmentListener(
    new AdjustmentListener(){ 
    void adjustmentValueChanged(AdjustmentEvent e){ 
     //Change the scrollposition of the other bar here using the values 
     from the adjustmentEvent 
    } 
}); 

做同樣的事情cond滾動條,但改變第一個滾動條的滾動位置。

這基本上做的是你添加偵聽器到你的滾動條。每當你滾動瀏覽它們,你會收到一個AdjustementEvent,告訴你滾動值是增加還是減少。

這只是解決問題的一般想法。不幸的是,我現在無法編寫真實和有效的代碼。我希望它有幫助!

0

我已經做了什麼,同時滾動這兩個表是,我只是管理他們的selectionModel。因此,當您從第一個表中選擇任何行時,第二個表中將選擇相同的行索引。

假設有兩個表,如tabletable1。第一個表(table)被放置在名爲scroll的第一個scrollPane和被放置在稱爲scroll1的第二個scrollPane的第二個表(table1)上。

剛剛成立的第二個表的selectionModel先表的selectionModel和同爲scrollPane爲:

table.setSelectionModel(table1.getSelectionModel()); 
scroll.getVerticalScrollBar().setModel(scroll1.getVerticalScrollBar().getModel()); 

有用的鏈接

How to Use Tables