为了账号安全,请及时绑定邮箱和手机立即绑定

Java Swing中的MouseMotionListener,将其与组件内部的组件一起使用

Java Swing中的MouseMotionListener,将其与组件内部的组件一起使用

慕仙森 2019-08-05 17:01:32
Java Swing中的MouseMotionListener,将其与组件内部的组件一起使用我正在使用Swing中的Touch User界面。虽然我知道这不是最佳的,但我的截止日期很短,没有时间触摸屏特定的GUI包(如果有的话)。我希望我的用户能够在屏幕上“滑动”他们的手指,并且我制作的特殊JScrollPane的视图随之移动。代码很简单 -    public class PanScrollPane extends JScrollPane implements MouseMotionListener{  public PanScrollPane() {     super();             this.addMouseMotionListener(this);      }@Overridepublic void mouseDragged(MouseEvent arg0) {     System.out.println("Mouse Dragged!");       }@Overridepublic 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(将侦听器添加到每个组件然后让它们将事件发送给它们的父组件)都可以。然而,这是一项非常耗时的工作,因为我宁愿把时间花在其他事情上,所以我想知道你是否知道任何解决这个问题的方法。感谢您的阅读,并希望感谢您的回答!:)编辑:让我的意图更清晰。我只希望panPanel捕获mousemotion事件,任何其他事件(如MouseClick,MouseRelease)应该正常处理
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

使用GlassPane怎么?我认为它的意思是准确地解决这些类型的情况。


查看完整回答
反对 回复 2019-08-05
?
青春有我

TA贡献1784条经验 获得超8个赞

为组件及其所有子组件获取mouseEvent是非常棘手的。您可能会考虑依赖稳定(并经过广泛测试的:-)代码。jdk7的做法是使用JLayer(内部注册AWTEventListener,因为它具有所有权限)。对于早期版本,您可以使用其前身JXLayer


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 584 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信