同时使用KeyEvents和Mouse事件

时间:2014-04-30 19:31:32

标签: java applet mouseevent keyboard-events

我正在尝试创建一个简单的Java applet,它可以检测applet中鼠标的位置,并检测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;
    }
}

2 个答案:

答案 0 :(得分:1)

如果要在点击时检查某人是否持有shift或其他键,MouseEvent会有一个名为getModifiers()的方法

答案 1 :(得分:0)

我通过将mouseMove(java.awt.Event e, int x, int y)替换为mouseMoved(java.awt.event.MouseEvent e)来修复此问题,因此现在当鼠标的位置发生变化时坐标会发生变化,并且当按住Shift键时信息会发生变化。