2012-11-23 45 views
0

问题在于:我在JScrollPane中稍微修改了JTable实现。然后,JTable将注册一个TransferHandler,以便项目可以重新排序并相互插入。TransferHandler,JTable&JScrollPane

问题是,一旦我们从Java中免费获得的拖放功能开始运行,滚动操作就无法获得适合自动滚动的MouseEvent。

我已经在JavaDoc上看到了这个模糊的规则(http://docs.oracle.com/javase/7/docs/technotes/guides/swing/1.4/dnd.html)。

但是我找不到一个解决方案,或者其他任何引用同样问题的人......所以有人在那里提供一些有用的知识吗?

+0

我认为甲骨文DND教程包含代码关于JScrollPane中的JTable和DND – mKorbel

+1

的示例不太明白:我们从Java中免费获得的_functionality in_将从头开始学习?如果是这样,为什么?或者为什么不禁用默认?换句话说:SSCCE会有帮助:-) – kleopatra

+0

Err,TransferHandler位于里面的DND功能是我正在谈论的。解释的扩展:免打扰功能消耗鼠标事件,因为它使用它来查找DND操作的开始和结束位置。这意味着我们在Swing中免费获得的自动滚动功能永远不会获得用于滚动的鼠标事件。因此,为了解决这个问题,需要修改TransferHandler – Rafe

回答

-1

此行为的原因是拖放行为以及TransferHandler未配置为支持自动滚动的事实 。 TransferHandler 将在启动拖放操作后接管鼠标事件,这意味着不会执行JTable的自动滚动行为 。

有文档中这只是模糊和含糊的引用,链接 以下提供:

http://docs.oracle.com/javase/7/docs/technotes/guides/swing/1.4/dnd.html (关键字:BasicDropTargetListener)

http://www.mpi-inf.mpg.de/departments/d5/teaching/ss05/is05/javadoc/javax/swing/plaf/basic/BasicDropTargetListener.html

+0

嗯...仍然没有得到你想达到的目的:禁用autoscroll?由于拖动时自动滚动似乎是默认行为(至少对于[带有自定义TransferHandler的JList](http://stackoverflow.com/q/14043897/203657),未尝试使用JTable) – kleopatra

+0

Drag and Drop在JTree上是这个问题。需要能够将节点移动到JTree上的新位置的功能。现在的问题是,为了从树的顶部拖动到底部(使用滚动窗格),树不会自动滚动,而不需要用户将鼠标光标在滚动窗格的底部前后移动。理论上,用户只需要将鼠标光标(保存节点)放在滚动窗格外部,它就会自动移动。 – Rafe

+0

嗯...只是用JTree上的快速自定义处理程序进行检查:这是默认行为(win,都是jdk6/7),不能重现鼠标前后移动的需要,它会开始自动滚动可见树形矩形的顶部/底部。怀疑还有其他问题。你可以考虑展示一个SSCCE来帮助追踪它:-)另外编辑你的questin以反映你正在说的事实_JTree_(与JTable) – kleopatra