如何检测Java Swing滚动条何时位于或接近滚动条底部?

如何检测Java Swing滚动条何时位于或接近滚动条底部?,java,swing,jscrollpane,Java,Swing,Jscrollpane,我正在开发一个需要内置电子表格的程序。我使用JTable作为电子表格,我将把它放在一个可滚动的窗口中,但电子表格通常是无限的,我能想到的唯一方法是,当用户滚动到电子表格的底部(或接近底部)时,它会添加大约20行。我该怎么做呢?您可以通过在滚动条中添加AdjustmentListener来实现这一点。查看下面的演示 import javax.swing.*; import java.awt.event.*; public class ScrollPaneEvents { private st

我正在开发一个需要内置电子表格的程序。我使用JTable作为电子表格,我将把它放在一个可滚动的窗口中,但电子表格通常是无限的,我能想到的唯一方法是,当用户滚动到电子表格的底部(或接近底部)时,它会添加大约20行。我该怎么做呢?

您可以通过在滚动条中添加
AdjustmentListener
来实现这一点。查看下面的演示

import javax.swing.*;
import java.awt.event.*;

public class ScrollPaneEvents
{
  private static final float THRESHOLD = 0.9f;

  public static void main(String[] args)
  {
    JTextArea textArea = new JTextArea("A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ\n");
    JScrollPane scrollPane = new JScrollPane(textArea);

    scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener()
    {
      @Override
      public void adjustmentValueChanged(AdjustmentEvent e)
      {
        int maxValue = scrollPane.getVerticalScrollBar().getMaximum() - scrollPane.getVerticalScrollBar().getVisibleAmount();
        int currentValue = scrollPane.getVerticalScrollBar().getValue();
        float fraction = (float) currentValue / (float) maxValue;

        if (fraction > THRESHOLD)
        {
          System.out.println("Scroll bar is near the bottom");
        }
      }
    });

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(scrollPane);
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}

查看此链接可获得一个好问题,电子表格不是无限的。:)好吧,我猜不是无限的,而是如此之大,以至于从所有的意图和目的来看,它们都是。