2013-07-18 2 views
1

scala.swing을 사용하고 있지만 자바 스윙의 솔루션은 scala.swing에도 적용 할 수 있습니다. 따라서이 질문을 Java Swing 질문으로 엽니 다.JTable 및 JScrollPane에서 드래그하는 동안 휠로 스크롤하는 방법

JScrollPane에서 TransferHandler를 사용하여 JTable을 보유하고 있습니다. 일반적으로 테이블은 마우스 휠 동작으로 스크롤 할 수 있습니다. 그러나 드래그하는 동안 스크롤 휠은 마우스 휠과 함께 움직이지 않습니다.

커서를 위 또는 아래로 이동 (자동 스크롤), 사용자가 스크롤 할 수 있지만 자동 스크롤 속도가 느리기 때문에 일반적인 마우스 기능을 제공하려고합니다.

JTable에서 마우스 휠 이벤트를 캡처하려고했습니다. 드래그하지 않을 때 MouseWheelMove 이벤트를 수신하지만 드래그하는 동안 아무것도 수신하지 않습니다. 내 생각 엔 마우스 휠 이벤트가 JTable이 아니라 TransferHandler와 관련된 무언가에 전달된다고 생각합니다.

드래그하는 동안 마우스 휠 동작을 감지하는 방법은 무엇입니까? 내 목표를 달성하는 한 다른 방법도 환영합니다.

+2

모든 프로그램에서 동시에 드래그 앤 스크롤하는 것이 가능하지 않다고 생각합니다. – ThaMe90

+0

모든 프로그램은 모든 Java 프로그램을 의미합니까? JS로 작성된 일부 웹 UI에서는 가능합니다. –

+2

OS 특유의 것 같아요. 내 상자에 바퀴를 달아 보았는데 어떤 응용 프로그램에서도 아무런 효과가 없었습니다. (익스플로러 fi를 _the_ 네이티브 참조 프로그램으로) – kleopatra

답변

0

DnD 제스처가 완료된 후에 만 ​​바퀴 이벤트가 버퍼링되고 전달됩니다 (적어도 OS X에서는). 내 시도는 다음과 같습니다.

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에서 이루어집니다. 나는 this example을 발견했다.

+0

감사합니다. 제 환경 (우분투 12.04 + Open JDK 7)에서는 드래그하는 동안 휠 이벤트가 삭제 된 것 같습니다. 자동 스크롤 동작을 조정하는 것은 좋은 생각이지만 기본 속도에 익숙한 사용자는 혼란스러워합니다. –

관련 문제