繁体   English   中英

在JTable和JScrollPane中拖动时如何用滚轮滚动

[英]How to scroll with wheel while dragging in JTable and JScrollPane

我正在使用scala.swing,但是Java Swing的解决方案也适用于scala.swing。 因此,我将这个问题作为Java Swing问题开放。

我在JScrollPane中有带有TransferHandler的JTable。 通常,该表可以通过鼠标滚轮移动来滚动。 但是,在拖动时,滚动窗格不会随鼠标滚轮移动。

用户可以通过将光标移动到窗格的顶部或底部来滚动(自动滚动),但是自动滚动很慢,因此我想提供通常的鼠标功能。

我试图在JTable中捕获鼠标滚轮事件。 不拖动时,它接收MouseWheelMove事件,但是拖动时,它什么也没有接收。 我的猜测是鼠标滚轮事件传递给与TransferHandler相关的东西,而不是JTable。

如何在拖动时检测鼠标滚轮运动? 只要达到我的目标,任何其他方法都可以使用。

似乎(至少在OS X上是)轮事件仅在DnD手势完成后才被缓冲和调度。 这是我的尝试:

import javax.swing._

val d = Array.fill(1000)(Array[AnyRef]((math.random * 1000).toInt.toString))
val t = new JTable(d, Array[AnyRef]("A")) {
  override def processMouseWheelEvent(e: java.awt.event.MouseWheelEvent): Unit = {
    println(s"Wheel: ${e.getID}")
    super.processMouseWheelEvent(e)
  }
  def enableEventsP(e: Long): Unit = enableEvents(e)
}
t.setDragEnabled(true)
t.enableEventsP(java.awt.AWTEvent.MOUSE_WHEEL_EVENT_MASK)

val f = new JFrame
f.getContentPane.add(new JScrollPane(t), java.awt.BorderLayout.CENTER)
f.pack()
f.setVisible(true)

当我在拖动的同时滚动滚轮然后释放鼠标时,将传递滚轮事件。


我想,您可能想覆盖JTable的自动滚动行为以使其更快。 据我所知,这是在DropTarget完成的。 我找到了这个例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM