java keyevent不能按预期工作

时间:2014-08-18 15:29:39

标签: java swing

我要在java中创建简单的打字游戏。所以我创建了新的类wordpanel,扩展了jpanel。一切正常工作,期待关键事件。当我按下所有第一个面板的关键前景时,应该更改黄色。但我认识到该行没有执行,因为即使我放sout()我也没有输出。我无法找到这个代码的错误。这是我的代码

public class wordPanel extends JPanel{

    public wordPanel(String word) {

        setOpaque(true);
        char letters[];
        letters = word.toCharArray();
        JLabel lab[]=new JLabel[letters.length];
        setLayout(new GridLayout(1, letters.length));
        for(int i=0;i<letters.length;i++){
            lab[i]=new JLabel(letters[i]+"");
            this.add(lab[i]);
        }

        this.addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyPressed(java.awt.event.KeyEvent evt) {
               char ch = evt.getKeyChar();
                   lab[0].setForeground(Color.YELLOW);
                   System.out.println("hey");
            }
        });



    }

} 

这是创建块的对象

        wordPanel wp1=new wordPanel("hello");
        Dimension d = wp1.getPreferredSize();

        wp1.setBounds(rand.nextInt((500 - 5) + 1) + 5, rand.nextInt((300 - 5) + 1) + 5, d.width, d.height);
        jPanel1.add(wp1);
        revalidate();

2 个答案:

答案 0 :(得分:4)

Swing并不意味着使用KeyListeners,使用Key Binding将更好地工作,并且您不必担心焦点。 请参阅:http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

键绑定很难,这是一个教程: http://www.dreamincode.net/forums/topic/245148-java-key-binding-tutorial-and-demo-program/

答案 1 :(得分:1)

我猜测面板顶部的其他组件会收到关键事件。 尝试将此keylistener添加到其他组件。