【问题标题】:How do make an infinite jscrollpane?如何制作无限的jscrollpane?
【发布时间】:2010-11-14 21:55:04
【问题描述】:

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

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

编辑

当然它实际上不会是无限的。我在问如何伪造它。

【问题讨论】:

  • 它将如何表现?你能把拇指拖到底部吗?它会位于滚动条的中间吗?
  • Google 阅读器会这样做,当您滚动到底部第六左右时,它会加载下一部分并且相应地调整滚动条

标签: java swing jscrollpane infinite


【解决方案1】:

稍等片刻,我将在这里发布我在related question 上给出的答案:

您可以做的是使用 GIMP 的滚动区域可以扩展的方式 当你移动时——点击鼠标中键进行标记 移动视口的初衷。然后,当鼠标 拖动(单击按钮时)移动视图的视口 jscrollpane 通过初始点击和当前点击之间的偏移量 位置。如果我们移动到画布的边界之外,那么你 应该只是放大画布。

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

  • 如果前一个和当前视口位于最小显示区域内(即,如果窗口小部件是平坦的而不是在滚动窗格中,它会占据的实际区域),什么也不做
  • 如果当前区域不在“最小区域”内,则将内部小部件调整为包含所需视口和原始小部件的矩形的大小(将原始小部件视为左上角的矩形在 (0,0))。请注意,您需要更改小部件的滚动位置。

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

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

    编码愉快!

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2011-11-19
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多