怎么做一个无限的jscrollpane?

我之前已经实现了拖动滚动,但是创建无限滚动窗格的最佳方法是什么? 当然不会有任何滚动条,我会实现拖动滚动。

我想要做的是在无限的表面上实现动态加载。

编辑

当然它实际上并不是无限的。 我在问如何假装它。

您可以使用JScrollPane.getViewport()来获取JViewport并向其添加ChangeListener 。 当大小或更重要的位置发生变化时, JViewport会提醒听众。 如果位置已经接近JScrollPane的边缘,则可以调整视口大小(您将需要忽略大小触发的更改事件)。

您可以执行以下操作:

 AdjustmentClass adj = new AdjustmentClass(); scrollPane.getHorizontalScrollBar().addAdjustmentListener(adj); scrollPane.getVerticalScrollBar().addAdjustmentListener(adj); 

在您的AdjustmentClass中执行以下操作:

 public class AdjustmentClass implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent adjustmentEvent) { // Implement your custom code here } } 

要获得事件的方向,请执行以下操作

 adjustmentEvent.getAdjustable().getOrientation(); 

您可以在以下位置找到方向常数:

 AdjustmentEvent.UNIT_INCREMENT AdjustmentEvent.BLOCK_INCREMENT 

等等

要检查用户是否正在拖动滚动条旋钮,请执行以下操作:

 adjustmentEvent.getValueIsAdjusting() 

还有更多,如果需要,请查看API以获取更多信息。

快乐的编码!

稍微延迟一下,我会在这里发布一个相关问题的答案:

您可以做的是使用GIMP具有可以在移动时延伸的滚动区域的方式 – 捕获鼠标中键的单击以标记移动视口的初始意图。 然后,拖动鼠标时(单击按钮时)将jscrollpane的视口移动初始单击和当前位置之间的偏移量。 如果我们移动到canvas的边界之外,那么你应该简单地放大canvas。

canvas是滚动窗格内显示的组件。 请注意,移动视口时,您可能需要执行以下操作:

  • 如果前一个和当前视口位于显示的最小区域内(即,如果小部件是平的而不在滚动窗格中,小部件将采用的实际区域),则不执行任何操作
  • 如果当前区域不在“最小区域”内,则将内部窗口小部件的大小调整为包含所需视口和原始窗口小部件的矩形的大小(将原始窗口小部件视为左上角的矩形(0) ,0))。 请注意,您需要更改窗口小部件的滚动位置。