2017-04-10 48 views
1

鑑於當在JScrollPane一個JTable滾動接近底部

JTable table = new JTable(); 
JScrollPane scrollPane = new ScrollPane(table); 

我要當表滾動接近底部檢測(所以新行可以加載並添加)檢測。 scrollPane.getViewport().addChangeListener()scrollPane.getVerticalScrollBar().addAdjustmentListener()之間是否有差別?

+0

爲你的描述讓我承擔的結尾,你不要所有的數據加載到表立刻。爲什麼要這麼做? – XtremeBaumer

+0

@XtremeBaumer由於加載數據需要時間,用戶應該能夠訪問初始數據,而無需等到所有數據都可用。例如。所有的數據都是幾十年,但用戶大多數都在關心過去的幾天。 –

回答

2
scrollPane.getVerticalScrollBar().addAdjustmentListener() 

只會觸發垂直滾動活動。

scrollPane.getViewport().addChangeListener() 

將觸發對視口屬性的更改,滾動位置的更改以及對視口容器的更改。

功能爲您的目的,都應該工作。

3

胡克的調整偵聽器,以垂直滾動條和獲取數據時,用戶滾動到視圖

final JScrollPane scrollPane = new JScrollPane(); 
//Hook up listener to vertical scroll bar 
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){ 
    @Override 
    public void adjustmentValueChanged(AdjustmentEvent e) { 
     // Check if user has done dragging the scroll bar 
     if(!e.getValueIsAdjusting()){ 
      JScrollBar scrollBar = (JScrollBar) e.getAdjustable(); 
      int extent = scrollBar.getModel().getExtent(); 
      int maximum = scrollBar.getModel().getMaximum(); 
      if(extent + e.getValue() == maximum){ 
       fetchMoreData(); 
      } 
     } 

    } 
});