检测JScrollPane中的JTable何时滚动到底部

时间:2017-04-10 14:28:29

标签: java swing

给出

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

我想检测表格何时滚动到底部(因此可以加载和添加新行)。 scrollPane.getViewport().addChangeListener()scrollPane.getVerticalScrollBar().addAdjustmentListener()之间是否存在差异?

2 个答案:

答案 0 :(得分: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();
            }
        }

    }
});

答案 1 :(得分:2)

scrollPane.getVerticalScrollBar().addAdjustmentListener()

仅在垂直滚动活动时触发。

scrollPane.getViewport().addChangeListener()

将触发对视口属性的更改,滚动位置的更改以及对视口容器的更改。

从功能上来说,两者都应该有用。