如何知道JScrollBar是否已到达JScrollPane的底部?

nat*_*han 5 java swing jscrollpane jscrollbar

我想知道是否有办法知道什么时候JScrollBar(在我的情况下是垂直的)到达了他的包含的底部JScrollPane.

起初我虽然AdjustmentListener在滚动条上使用了一个但我不知道如何解释该value属性JScrollBar.此外,我不确定正确理解maximum代表什么,如果我可以使用该值来获取我需要的信息.

编辑:

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
    @Override
    public void adjustmentValueChanged(AdjustmentEvent ae) {
        System.out.println("Value: " + scrollPane.getVerticalScrollBar().getValue() + " Max: " + scrollPane.getVerticalScrollBar().getMaximum());
    }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*dam 10

您必须将滚动条的范围添加到计算中.我在下面的示例中将代码添加到您的代码中.

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
    @Override
    public void adjustmentValueChanged(AdjustmentEvent ae) {
        int extent = scrollPane.getVerticalScrollBar().getModel().getExtent();
        System.out.println("Value: " + (scrollPane.getVerticalScrollBar().getValue()+extent) + " Max: " + scrollPane.getVerticalScrollBar().getMaximum());
    }
});
Run Code Online (Sandbox Code Playgroud)

两种替代实施(部分对Kleopatra作出反应)

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {

    @Override
    public void adjustmentValueChanged(AdjustmentEvent event) {
        JScrollBar scrollBar = (JScrollBar) event.getAdjustable();
        int extent = scrollBar.getModel().getExtent();
        System.out.println("1. Value: " + (scrollBar.getValue() + extent) + " Max: " + scrollBar.getMaximum());

    }
});
Run Code Online (Sandbox Code Playgroud)

或者通过模型

scrollPane.getVerticalScrollBar().getModel().addChangeListener(new ChangeListener() {

    @Override
    public void stateChanged(ChangeEvent event) {
        BoundedRangeModel model = (BoundedRangeModel) event.getSource();
        int extent = model.getExtent();
        int maximum = model.getMaximum();
        int value = model.getValue();

        System.out.println("2. Value: " + (value + extent) + " Max: " + maximum);

    }
});
Run Code Online (Sandbox Code Playgroud)