我正在使用Swing中的Touch用户界面。虽然我知道这不是最佳的,但我只是在一个很短的截止日期,没有时间触摸特定的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的是各种JComponents的容器。当我第一次开始研究这个时,我认为MouseMovedEvent和MouseDraggedEvent会向上传播'GUI树',直到他们遇到一个具有特定于该事件的侦听器的Component。现在看来,我添加到panScrollPane的任何组件都会阻止任何这些MouseMotion事件,使我无法平移。
panScrollPane.add(new JButton("This thing blocks any mouse motion events"));
我想通手传播的MouseEvent(添加听众每一个部件,然后让他们的事件发送到他们的父母)会工作。但是,这是一项非常耗时的工作,因为我宁愿花时间处理其他事情,所以我想知道您是否有任何人知道解决此问题的方法。
感谢您的阅读,并希望谢谢您的回答! :)
编辑:使我的意图更清晰。我只希望mousemotion事件被panPanel捕获,任何其他事件(如MouseClick,MouseRelease)都应该正常处理
看起来很有希望,但玻璃窗会“捕捉”我感兴趣的“捕捉”事件(MouseMotion的事件)还是每一个可能的事件? –
对,教程代码展示了如何让它传播任何剩余的事件,我会用这个玻璃窗格来测试:)谢谢! –
@Erwin您可以将MouseInputAdapter作为mouseListner添加到父级以侦听拖动事件。其他事件,我认为只会通过它发送给子组件。 –