【问题标题】:JScrollPane: Disable Scroll-by-draggingJScrollPane:禁用滚动拖动
【发布时间】:2011-12-21 06:50:45
【问题描述】:

我正在使用一些 JGraphX 组件,但这个问题可以应用于 java 的一般用途。

我在 JScrollPane 中有一个组件。我遇到的问题是我能够通过“抓取”视图并像谷歌地图一样移动它来平移视图。但是如果光标离开视口,滚动会改变方向。我做了一些研究,发现了导致问题的问题。可以在此页面的下方部分找到它,它开始讨论滚动窗格的工作原理。

http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

将光标移到图像上并按下光标。继续 按下光标,拖动到图像外的一点并暂停。这 图像的可见区域向光标移动。这 滚动窗格启用了滚动拖动功能,并且 使用 JComponent API,但它是由自定义组件实现的 显示图像。

它有一个小演示,因此您可以看到它的工作原理以及可供下载的代码。

所以默认情况下,滚动窗格实现了滚动拖动,但它实际上与我需要滚动的方式相反。我正在使用的 JGraphX 库扩展了大多数用于以某种方式使自己受益的类,但基本思想仍然适用。我真的只需要知道禁用它的最简单方法。你的页面说它由滚动窗格和 JComponent API 启用,但实际上启用了什么?

【问题讨论】:

  • 感谢两位的帮助。我确实经历了所有可能将自动滚动设置为 true 并将其设置为 false 的类。但最后,没有骰子。我已经尝试修复鼠标侦听器以满足我的需要......也没有骰子。我来这里是因为我更喜欢这里的人,而且你们知识渊博,但我想我必须等待那里的回应。 :( 我最初认为自动滚动也是问题。但无论我在哪里将其设置为 false,它仍然会这样做
  • 伙计,这听起来很烦人。也许您应该从滚动窗格和包含的组件中获取所有 Mouse(Motion)Listeners,然后打印出一个列表。看看每种类型有多少。然后尝试删除它们,看看仍然会发生什么(如果有的话)。如果您无法通过在视口外拖动来滚动,那么其中一个鼠标侦听器必须是罪魁祸首。你能告诉我们你在窗格中有什么组件类吗?如果里面还有别的东西?或许我们可以在本地模拟一下并进行一些实验。
  • Jgraphx 的布局相当混乱。如果您熟悉它,这对您来说可能会更清楚。但我有一个扩展 jpanel 的类,它有一个扩展他们的 mxGraphComponent 的类。 mxGraphComponent 扩展了 jScrollpane。到目前为止,一切都很好。但这是令人困惑的地方。我实际上没有看到一个组件。它有一个画布类,似乎可以完成所有渲染,但我真的不知道。它还有一个看起来只是处理事件的 mxGraph 对象。但它们实际上都不是来自组件类。自从我查看此代码以来已经有一段时间了
  • mxGraphComponent 有一个扩展 jcomponent 的类,称为 mxGraphControl。但我将它的自动滚动设置为 false,最后没有改变......
  • 我从我没有创建的 mxGraphComponent 中删除了所有侦听器,现在它可以按我的意愿工作了!非常感谢!

标签: java swing jscrollpane drag


【解决方案1】:

不确定,但我认为您需要使用:

component.setAutoscrolls( false );

【讨论】:

    【解决方案2】:

    This method 来自JComponent 看起来是调查的最佳起点。您可以在滚动窗格中检索组件,并在其上调用带有false 的方法。这是默认设置,但 JGraphX 可能默认启用它。

    或者,您可以从滚动窗格中获取MouseListeners 和/或MouseMotionListeners,并将它们替换为覆盖拖动行为的内容。由于这些是接口,因此您可以使用 proxy 对象。不过,这似乎有点 hacky。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多