简单的KeyListener无法正常工作

我正在研究一个非常简单的Java项目,试图了解如何使用KeyListener。 我创建了一个Main类和一个KeyListener,MouseListener类。 我想按键盘键时会发生一些事情。 到目前为止,唯一可行的是点击时“Hello”。

这是我的代码:

import javax.swing.JFrame; import javax.swing.JPanel; public class KeyPractice{ public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); panel.addKeyListener(new KeyEar()); panel.addMouseListener(new KeyEar()); frame.add(panel); frame.setVisible(true); frame.setSize(400, 400); } } 

和Keylistenerclass……

 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class KeyEar implements KeyListener, MouseListener { public KeyEar(){ } @Override public void mouseClicked(MouseEvent arg0) { System.out.println("Hello"); } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent arg0) { System.out.println("Hello"); } @Override public void keyReleased(KeyEvent arg0) { System.out.println("Hello"); } @Override public void keyTyped(KeyEvent arg0) { System.out.println("Hello"); } } 

JPanel无法获得KeyListener的工作重点。

首选方法是使用键绑定进行Swing。 即使组件没有焦点,您也可以将Action映射到KeyStroke。

键绑定示例

  • JPanel不是可聚焦的JComponent ,必须添加可聚焦或与KeyEvents交互的Object / JComponents

  • KeyListener不适合Swing JComponents ,因为Swing被KeyBindings取代

我有类似的问题,但它解决起来很简单,但你必须找到如何解决它不是那么容易的任务:D

那怎么解决这个? 我只是将所有按钮设置为可聚焦的假。 instanceOfYourButton.setFocusable(false); 而已