KeyListener不起作用,但Mousepressed会起作用

时间:2014-12-16 15:50:39

标签: java user-interface io keylistener keyevent

以下是我的代码的简化版

public class StateController extends GraphicsProgram {

    public Menu menu = new Menu();

    public void run() {
        addMouseListeners();
        addKeyListeners();
    }

}

public class Menu {
    int x = 0;

    public void keyPressed(KeyEvent e) {
       System.out.println(x);
    }

    public void mousePressed(MousEvent e) {
       System.out.println(x);
    }

}

程序检测到鼠标按下的时间,但是当按键时不会打印X.你能看到任何问题吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果向类中添加侦听器,则此类必须实现侦听器接口才能获取通知:

public class StateController extends GraphicsProgram implements MouseListener, KeyListener

或者您即时进行:

yourUiElement.addKeyListener(new KeyListener() {
        public void keyTyped(KeyEvent e) {}         
        public void keyReleased(KeyEvent e) {}          
        public void keyPressed(KeyEvent e) {
            System.out.println(x);
        }
    });

答案 1 :(得分:1)

假设您的代码实际编译并且您正确实现了KeyListener接口,则仅将KeyEvents分派给具有焦点的组件。你的StateController没有焦点。

默认情况下,JPanel无法调焦。所以我猜你的StateController类正在扩展JPanel。所以你需要:

  1. 在类
  2. 的构造函数中使用setFocusable(true)使面板具有焦点
  3. 在GUI可见后调用panel.requestFocusInWindow()。您只能请求关注可见GUI中的组件。