Java KeyListener永远不起作用(在setFocusable + requestFocusInWindow之后)

问题描述 投票:0回答:1

添加setFocusable(true)和requestFocusInWindow()之后,我在JComponent对象内的KeyListener仍然不起作用。有人可以找到问题吗?

public class Canvas extends JComponent{
    public Canvas(String str) {
        this.str = str;
        this.setPreferredSize(new Dimension(700, 300));
        setFocusable(true);
        requestFocusInWindow();
        addKeyListener(new KeyAdapter(){
            public void keyTyped(KeyEvent e) {
                out.println("in");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            public void keyPressed(KeyEvent e) {
                out.println("in");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            public void keyReleased(KeyEvent e) {
                out.println("in");
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
    }

我希望当按下任何键时,“ in”将显示在控制台中。谢谢!

java swing keylistener
1个回答
0
投票

除非框架已打包或可见,否则您不能要求将重点放在组件上。因此,在构造函数中调用这些方法不会执行任何操作。

基本逻辑将是:

CustomComponent component = new CustomComponent(...);
frame.add( component );
frame.pack();
frame.setVisible( true );
component.requestFocusInWindow();

注意,我将组件称为CustomCompnent,因为已经有一个称为“ Canvas”的AWT类,这可能会造成混淆。创建类时,请使用更具描述性的名称。

© www.soinside.com 2019 - 2024. All rights reserved.