【问题标题】:Creating my own event for right button click为右键单击创建我自己的事件
【发布时间】:2023-03-16 14:00:02
【问题描述】:

我在框架上有一些组件,我需要它在右键单击时做出响应。我必须使用我自己的事件。我应该扩展MouseEvent 吗?如何在我的事件中将右键单击与其他人分开?

【问题讨论】:

  • 我尝试创建自己的类(它需要按任务)。但我完全被误导了。首先,我尝试创建扩展 EventObject 的类,但我不知道如何使他成为完全右键单击事件。比我想扩展 MouseEvent 的想法要多,但我仍然想不出如何以正确的方式做到这一点。我提醒您,我必须创建自己的事件类,而不仅仅是使用 java.awt.event.MouseEvent。

标签: java swing mouse mouseevent right-click


【解决方案1】:

不,你不会扩展 MouseEvent,而是使用 MouseEvent。

如果这是一个 Swing GUI,您可以向组件添加一个 MouseListener,然后在 MouseListener 的 mousePressed 方法中,获取传递给该方法的 MouseEvent 对象,获取它的 modifiersEx,然后检查是否按下了右键:

public void mousePressed(MouseEvent mEvt) {
   if ((mEvt.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) != 0) {
      // right button has been pressed
   }
}

【讨论】:

  • 好的,谢谢。我知道这种解决问题的方法,我同意不需要创建自定义事件,但任务不是使用 Java 的 MouseEvent,任务是创建自定义事件。
【解决方案2】:

MouseEvent 类有一个方法可以让您检查使用了哪个鼠标按钮。它被称为getButton,它返回一个int 值,您可以将其与predefined values 之一进行比较

除此之外,还有一个名为SwingUtilities 的便捷类,它为这些字段的使用提供了一个很好的抽象层。这是一个你会发现特别有趣的方法:isRightMouseButton

换句话说,您不需要创建自己的MouseEventMouseListener 实现就足够了。这是一个内联实现的示例,不相关的细节被排除在外。

new MouseListener(){

        @Override
        public void mouseClicked(MouseEvent e) {
            if(SwingUtilities.isRightMouseButton(e)){
                //do what you want on right click
            }
        }
        // other methods required by the interface

    };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多