【问题标题】:Simultaneous/Combined MouseListener & KeyListener, MouseEvent & KeyEvent Java同时/组合的 MouseListener 和 KeyListener、MouseEvent 和 KeyEvent Java
【发布时间】:2017-10-27 23:38:39
【问题描述】:

我想知道 MouseEventKeyEvent 如何同时工作。

假设一个 JFrame,JPanel。

我想知道在某些 MouseEventKeyEvent 示例中如何处理事件:

addKeyListener(new KeyAdapter() {
  @Override public void keyReleased( KeyEvent evt) {
    if ((evt.getKeyCode() == KeyEvent.VK_META) || (evt.getKeyCode() == KeyEvent.VK_WINDOWS)) {
      //SomeEVENT
    }
  }
});

addMouseListener(new MouseAdapter() {
  public void mouseReleased(MouseEvent evt) {
    if (SwingUtilities.isLeftMouseButton(evt)) {
      System.out.println("Left button released.");
    }
  }
});

测试代码

addMouseListener(new MouseAdapter() {

  public void mouseClicked(MouseEvent evt) {
    System.out.println("mouseClicked:");
    if ((evt.getModifiers() & KeyEvent.VK_META) == KeyEvent.VK_META) {
      System.out.println("KeyEvent.VK_META:");
    }
    if ((evt.getModifiers() & KeyEvent.VK_CONTROL) == KeyEvent.VK_CONTROL) {
      System.out.println("KeyEvent.VK_CONTROL:");
    }
    System.out.println("KeyEvent.getKeyModifiersText(evt.getModifiers()):" 
        + KeyEvent.getKeyModifiersText(evt.getModifiers()));

  }
});

输出

mouseClicked:
mouseClicked:
mouseClicked:
mouseClicked:
mouseClicked:

没有检测到Button Control的问题!!!

但是只有在同时LeftButton + CMDWIN 时才执行该动作?

EDIT2

使用我之前的 TEST CODE 并按下 Shift + 单击,显示消息!!!

mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌥+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌘+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌃+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌘+⌥+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌘+⌥+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌥+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⌘+⌥+Button1
mouseClicked:
KeyEvent.getKeyModifiersText(evt.getModifiers()):Button1
mouseClicked:
KeyEvent.VK_CONTROL:
KeyEvent.getKeyModifiersText(evt.getModifiers()):⇧+Button1

这是操作系统问题吗(我有 macOS Sierra)?

【问题讨论】:

  • MouseEvent 支持按键扩展按键(alt、ctrl、meta、shift)
  • 查看JavaDocs for MouseEvent#getModifiersEx中显示的示例
  • @MadProgrammer 谢谢你的信息,但我不明白为什么不起作用。
  • 做一些谷歌搜索。另外,查看 MouseEvent JavaDocs,特别是 isControlDown 之类的东西,所有答案都在那里

标签: java swing mouseevent macos-sierra keyevent


【解决方案1】:

答案很简单,阅读JavaDocs for MouseEvent

MouseEvent 带有一个Extended Modifier state,它是用于生成事件的按钮和键的简单位掩码。有很多关于如何使用它们的例子。

因为我又傻又懒,我只是更喜欢使用事件对象本身提供的功能,比如MouseEvent#isControlDownMouseEvent#isMetaDown

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多