【问题标题】:JPanel doesn't response to KeyListener eventJPanel 不响应 KeyListener 事件
【发布时间】:2012-07-14 07:13:10
【问题描述】:

我有一个JFrame 的子类,它使用从JPanel 扩展的类

public class HelloWorld extends JPanel implements KeyListener

我将 HelloWorld 的对象添加到框架 - app.add(helloWorld);。现在,当我按下任何非 KeyListener 方法的键盘键时,helloWorld 似乎没有窗口焦点。我也尝试过调用helloWorld.requestFocusInWindow();,但仍然没有响应。

如何让它响应按键?

【问题讨论】:

  • 查看key bindings。可能会也可能不会解决问题,但对于 Swing 来说通常是更好的方法。

标签: java swing netbeans keylistener


【解决方案1】:

JPanel 默认情况下是不可聚焦的。也就是不能响应焦点相关的事件,也就是不能响应keyevents。

我建议尝试将窗格上的 setFocusable 设置为 true 并重试。请务必先单击面板以确保它获得焦点。

不过请理解,您会遇到奇怪的焦点遍历问题,因为现在面板将在用户浏览您的表单时接收输入焦点,这使得焦点似乎在某个地方丢失了。

此外,KeyListeners 在这种情况下往往不可靠(由于焦点管理器的工作方式)。

【讨论】:

    【解决方案2】:

    您是否为您的HelloWorld 面板设置了KeyListener 是该面板本身?此外,您可能需要将该面板设置为可聚焦的。我通过这段代码对其进行了测试,它似乎可以正常工作

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

    【讨论】:

    • 如果你有自定义鼠标监听器,别忘了grabFocus()
    【解决方案3】:

    你必须添加简单

    addKeylistener(new HelloWorld());
    

    【讨论】:

      【解决方案4】:

      在 MyFrame 方法中添加这个;

      this.addKeyListener(helloWorld);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-26
        • 2012-12-09
        • 2014-03-25
        • 2014-05-06
        • 1970-01-01
        • 2018-07-07
        相关资源
        最近更新 更多