8 java swing netbeans keylistener
我有一个JFrame使用扩展的类的子类JPanel
public class HelloWorld extends JPanel implements KeyListener
Run Code Online (Sandbox Code Playgroud)
我添加了一个HelloWorld框架的对象- app.add(helloWorld);.现在,当我按任何键盘键时,非KeyListener方法被调用,似乎helloWorld没有窗口焦点.我也试过调用helloWorld.requestFocusInWindow();但仍然没有回应.
如何让它响应按键?
Psh*_*emo 16
您是否KeyListener为您的HelloWorld面板设置了该面板本身?此外,您可能需要将该面板设置为可聚焦.我通过这个代码对它进行了测试,它似乎可以正常工作
class HelloWorld extends JPanel implements KeyListener{
public void keyTyped(KeyEvent e) {
System.out.println("keyTyped: "+e);
}
public void keyPressed(KeyEvent e) {
System.out.println("keyPressed: "+e);
}
public void keyReleased(KeyEvent e) {
System.out.println("keyReleased: "+e);
}
}
class MyFrame extends JFrame {
public MyFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200,200);
HelloWorld helloWorld=new HelloWorld();
helloWorld.addKeyListener(helloWorld);
helloWorld.setFocusable(true);
add(helloWorld);
setVisible(true);
}
public static void main(String[] args) {
new MyFrame();
}
}
Run Code Online (Sandbox Code Playgroud)
Mad*_*mer 10
默认情况下,JPanel不可聚焦.也就是说,它无法响应焦点相关事件,这意味着它无法响应关键事件.
我建议尝试将窗格上的setFocusable设置为true并再次尝试.确保先单击面板以确保它获得焦点.
但是要明白,你会得到奇怪的焦点遍历问题,因为当用户在你的表单中导航时,面板现在会收到输入焦点,使得焦点在某些地方失去了焦点.
此外,KeyListener在这种情况下,s往往是不可靠的(由于焦点管理器的工作方式).
| 归档时间: |
|
| 查看次数: |
24389 次 |
| 最近记录: |