저는 Swing에서 Touch User 인터페이스로 작업 중입니다. 이것이 최적이 아니라는 것을 알고있는 동안, 나는 짧은 마감 시간을 가지며 Touch-screen 특정 GUI 패키지 (있을 경우)를 가질 시간이 없다.Java Swing의 MouseMotionListener, 구성 요소 내부의 구성 요소와 함께 사용
내 사용자가 손가락으로 화면을 가로 질러 손가락을 움직일 수있게하고, 내가 만든 특수한 JScrollPane의 뷰를 그와 함께 움직이게하고 싶습니다. 코드는 매우 간단합니다 -
public class PanScrollPane extends JScrollPane implements MouseMotionListener{
public PanScrollPane() {
super();
this.addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent arg0) {
System.out.println("Mouse Dragged!");
}
@Override
public void mouseMoved(MouseEvent arg0) {
System.out.println("Mouse Moved!");
}
나는 데 문제가 JScrollPane의이 JComponent의 모든 종류의 컨테이너 것입니다. 처음 작업을 시작했을 때 MouseMovedEvent 및 MouseDraggedEvent가 해당 이벤트에 대한 수신기와 함께 Component를 만날 때까지 'GUI 트리'를 전파한다고 생각했습니다. 이제는 panScrollPane에 추가 한 모든 구성 요소가 이러한 MouseMotion 이벤트를 차단하여 팬이 표시되지 않는 것으로 보입니다.
panScrollPane.add(new JButton("This thing blocks any mouse motion events"));
나는 (모든 단일 구성 요소에 청취자를 추가 한 다음 자신의 부모에게 이벤트를 보내도록) 일 것이다 손으로 된 MouseEvent를 전파하는 생각. 그러나 이것은 매우 시간이 많이 걸리는 작업이며 다른 것들에 대한 작업에 시간을 할애하기 때문에이 문제에 대한 해결 방법을 알고 있는지 궁금합니다.
읽고 감사드립니다. 답변 해 주셔서 감사합니다. :)
편집 : 나의 의도를 명확하게하기. panPanel에서 mousemotion 이벤트를 잡아 주기만하면 MouseEvent, MouseRelease와 같은 다른 이벤트는 정상적으로 처리되어야합니다.
유망하지만 유리판은 'catch'(MouseMotion 것) 또는 가능한 모든 이벤트에 관심이있는 이벤트 만 '캐치'합니까? –
튜토리얼 코드는 잔여 이벤트를 전파하는 방법을 보여줍니다.이 유리 창으로 테스트 해 보겠습니다 :) 고마워요! –
@Erwin 드래그 이벤트를 수신하기 위해서, MouseInputAdapter를 mouseListner로서 부모에게 추가 할 수 있습니다. 다른 이벤트들, 나는 그것을 통해서만 자식 구성 요소로 보내질 것이라고 생각합니다. –