1

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

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

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

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

如何在拖动时检测鼠标滚轮的运动?只要达到我的目的,任何其他方法都是受欢迎的。

4

1 回答 1

0

似乎(至少在 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据我所知,这是完成的。我找到了这个例子

于 2013-07-19T15:30:37.873 回答