使用KeyListeners更好地进行JLabel移动

时间:2013-07-31 13:49:07

标签: java swing jlabel keylistener

我在使用KeyListeners移动JLabel时遇到了一些问题。当我单击一个键移动我的标签时,它会移动一点,暂停一秒,然后移动。如何让我的运动更加顺畅?

frame.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent e) {
        if(e.getKeyChar() == 'w'){
            moveY -= 10;
            label.setLocation(moveX, moveY);
        }
        if(e.getKeyChar() == 'a'){
            moveX -= 10;
            label.setLocation(moveX, moveY);
        }
        if(e.getKeyChar() == 's'){
            moveY += 10;
            label.setLocation(moveX, moveY);
        }
        if(e.getKeyChar() == 'd'){
            moveX += 10;
            label.setLocation(moveX, moveY);
        }
    }
});

1 个答案:

答案 0 :(得分:3)

    默认情况下,
  1. JFrame永远不会对KeyEvent

  2. 收听的KeyListener做出反应
  3. JFrame无法集中JComponent,你需要使用可聚焦的contianer e,g,JPanel,但又需要错误的决定,因为需要设置pernament Focus - setFocusable(true)

  4. 不要将KeyListener用于Swing JComponents,使用可能的抽象,使用KeyBindings(在此处搜索代码示例)