【问题标题】:Make java scrollbar start in middle of the scrolling content使java滚动条在滚动内容的中间开始
【发布时间】:2012-02-23 12:53:05
【问题描述】:

我有一个控制大面板的水平滚动条(宽度很大,高度很小,因此是水平面板)。

我希望滚动条的开始(当旋钮位于最左侧时)不是从它正在滚动的面板的开头开始,而是在我指定的特定位置开始。滚动条的末端也是如此(当旋钮位于最右侧时)。

我发现滚动条总是绑定到它正在滚动的面板上,我不知道如何改变它的行为。

编辑:

例如,想象一个普通的网页:当在页面顶部时,滚动条旋钮也在顶部。在底部时,滚动条旋钮位于底部。我想为内容定义新的限制,这样当滚动条旋钮到达顶部或底部时,页面会显示我定义的限制,而不是真正的顶部和底部。

【问题讨论】:

    标签: java swing scrollbar awt panel


    【解决方案1】:

    我通过使用JScrollbar方法setValues()解决了这个问题,它允许我同时设置滚动条的最大值、最小值、值和范围。通过将最大值和最小值设置为我想要的值,滚动条的行为就像我想要/预期的那样。

    问题是我只设置了最大值和最小值(setMaximumsetMinimum),并且由于模型中有严格的政策 minimum ,该策略不起作用。

    【讨论】:

      【解决方案2】:

      How to Use Scroll Panes所示,可以使用组件的scrollRectToVisible()方法滚动到任意Rectangle。有一个例子here

      附录:作为ContainerJPanel 是相当可替代的,即使它有相当多的嵌套内容。在给定级别交换内容的一种可靠方法是通过CardLayout,显示为hereherehere

      【讨论】:

      • 这不是我问的。我不想滚动到特定内容。我有一个非常大的内容,我希望我的滚动条只考虑该内容的一小部分。也就是说,我想定义滚动条的边界,这样当滚动条旋钮最多在左边(或右边)时,显示的内容就是内容的特定部分。
      • 啊,现在@IaD 的回答很有道理;我不知道有什么更好的。一般来说,在数据模型而不是视图中解决这个问题会更容易。内容是否封装良好,例如TableModel?
      • 内容相当复杂:几个 JPanel,一些带有文本,另一些带有许多组件。所以没有单一的数据模型。正如小伙子所说,一个可能的答案是修剪内容以仅显示应该在视口中可见的部分。然而,由于内容如此复杂,这涉及到许多(计划外的)变化。我一直在寻找一些解决方案,它仍然可以让我拥有所有内容,但只考虑其中的一部分进行滚动。
      • CardLayout 可能是您控制可见性的最佳选择;以上。
      • 由于我没有找到其他解决方案,我用这种方法进行了回答。感谢您的时间和帮助:)
      【解决方案3】:

      是否可以将大面板保留为后备存储并将感兴趣的区域复制到实际在滚动面板中实现的面板中。这样您就不必对抗滚动窗格的行为。

      【讨论】:

      • 我确实可以尝试修剪内容,而不是与正常行为作斗争。但是,这只是大平台的一小部分,修剪内容需要大量(计划外)更改。如果找不到其他解决方案,这是我最后的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多