java - java中setFocusable的使用

标签 java swing focus

我已经创建了类 start,在按右箭头键时,一个矩形 block 将移动。但此代码仅在添加 setFocusable(true) 时才有效。我阅读了 Java 文档,以及许多以前的 Stack Overflow 问题,但我仍然不知道为什么 setFocusable 如此重要。请回答我,仅解释此代码。

public class start extends JPanel{

    int x=0, xa=1;

    public start() {

        addKeyListener(new KeyListener(){

            public void keyPressed(KeyEvent ke){

                if(ke.getKeyCode()==KeyEvent.VK_RIGHT){

                    xa=xa+1;

                    repaint();

                }
            }

            public void keyTyped(KeyEvent ke){}

            public void keyReleased(KeyEvent ke){}

        });

        setFocusable(true);

    }

    public void paint(Graphics g){

        super.paint(g);

        g.fillRect(x+xa,100,40,50);

    }

}

最佳答案

but I still have no idea why setFocusable is so important.

事件仅分派(dispatch)到具有焦点的组件。因此,只有当面板“可聚焦”并且具有焦点时,您的 KeyEvent 才会被分派(dispatch)到面板。

参见Motion Using the Keyboard有关此主题的更多信息,包括两种不同的解决方案。

关于java - java中setFocusable的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748284/

相关文章:

java - 打印 Java 变量的类型

java - Activity 未分配给 Android.app.Activity Manifest XML

来自父类(super class)的 Java 子类构造函数

Java制作一条定向线并使其移动

java - Jtable能有整体焦点吗?

jQuery focus() 在 FireFox 中不起作用,但在 Chrome 中起作用

java - 如何从另一个 JInternalFrame 调用 JInternalFrame?

java - 简单的JFrame程序但看不到JTextfield

java - JToolbar背景图片

jquery - 单击另一个元素时不要失去焦点