Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyListener不起作用,但Mousepressed起作用_Java_User Interface_Io_Keylistener_Keyevent - Fatal编程技术网

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

Java KeyListener不起作用,但Mousepressed起作用,java,user-interface,io,keylistener,keyevent,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 keyP

这是我的代码的简化版本

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。你看到什么问题了吗


非常感谢。

如果将侦听器添加到类中,该类必须实现侦听器接口才能获得通知:

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);
        }
    });

假设您的代码已经编译并且正确实现了KeyListener接口,那么KeyEvents只会被分派到具有焦点的组件。您的StateController没有焦点

默认情况下,JPanel不可聚焦。我猜您的StateController类正在扩展JPanel。因此,您需要:

  • 在类的构造函数中使用
    setFocusable(true)
    使面板可聚焦
  • 在GUI显示后调用
    面板.requestFocusInWindow()
    。您只能请求关注可见GUI中的组件

  • 请发表一个简短但完整的例子,说明你在做什么。您发布的代码毫无意义,因此我们无法告诉您出了什么问题。
    这里是我的代码的简化版本
    -简化版本对我们没有任何帮助。问题可能出在您决定不包含的代码中。张贴一个适当的说明问题的帖子。