怎么做一个无限的jscrollpane?

时间:2009-07-29 00:38:42

标签: java swing jscrollpane infinite

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

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

修改

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以执行以下操作:

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以获取更多信息。

快乐的编码!

答案 2 :(得分:0)

稍微延迟一下,我会在related question发布答案:

  

你可以做的是使用GIMP有一个可以扩展的滚动区域的方式   当你移动时 - 抓住鼠标中键的点击进行标记   移动视口的初始意图。然后,当鼠标是   拖动(单击按钮时)移动视口   jscrollpane由初始点击和当前之间的偏移量组成   位置。如果我们超出了画布的范围,那么你   应该只是放大画布。

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

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