【问题标题】:Using KeyEvents and Mouse events at the same time同时使用 KeyEvents 和 Mouse 事件
【发布时间】:2014-04-30 19:31:32
【问题描述】:

我正在尝试创建一个简单的 Java 小程序,它既可以检测鼠标在小程序中的位置,又可以检测 shift 键是否被释放或按下。但是,当我添加 KeyListener 时,程序会忽略 mouseMove 事件。如何在使用 KeyListener 的同时让 mouseMove 事件正常工作?

public class Test extends java.applet.Applet implements java.awt.event.KeyListener {
    String message;
    int moveX, moveY;

    public Test() { this.addKeyListener(this); }

    public void init() {
        message = "";
        moveX = moveY = 0;
    }

    public void paint(java.awt.Graphics g) {
        new Test();
        g.drawString(message,15,15);
        g.drawString("(" + moveX + "," + moveY + ")",900,630);
    }

    @Override
    public void keyPressed(java.awt.event.KeyEvent e) {
        if (e.getKeyCode() == java.awt.event.KeyEvent.VK_SHIFT)
            message = "Shift key pressed";
        repaint();
    }

    @Override
    public void keyReleased(java.awt.event.KeyEvent e) {
        message = "Shift key released";
        repaint();
    }

    @Override
    public void keyTyped(java.awt.event.KeyEvent e) {}

    public boolean mouseMove(java.awt.Event e, int x, int y) {
        moveX = x;
        moveY = y;
        repaint();
        return true;
    }
}

【问题讨论】:

  • 你只实现了一个keylistener
  • 但它执行一个动作,对吧?如果按下 shift 键,则显示会改变。
  • KeyListener 只会在它注册到的组件是可聚焦的并且具有键盘焦点时引发事件

标签: java applet mouseevent keyboard-events


【解决方案1】:

如果您想检查是否有人在单击时按住 shift 或其他键,MouseEvent 有一个名为 getModifiers() 的方法

【讨论】:

    【解决方案2】:

    我通过将mouseMove(java.awt.Event e, int x, int y) 替换为mouseMoved(java.awt.event.MouseEvent e) 解决了这个问题,所以现在坐标会随着鼠标位置的变化而变化,并且当按住shift 键时消息也会发生变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多