Java 使用KeyListener可以更好地进行JLabel移动

Java 使用KeyListener可以更好地进行JLabel移动,java,swing,jlabel,keylistener,Java,Swing,Jlabel,Keylistener,我在使用KeyListeners移动JLabel时遇到了一个小问题。当我单击一个键移动标签时,它会移动一点,暂停一秒钟,然后移动。我怎样才能使我的动作更流畅 frame.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { if(e.getKeyChar() == 'w'){ moveY -= 10; label.setLocation(m

我在使用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);
        }
    }
});
  • 默认情况下,
    JFrame
    从不对
    KeyEvent
    侦听的
    KeyListener

  • JFrame
    不可聚焦
    JComponent
    ,您需要使用可聚焦contianer e,g,
    JPanel
    ,但同样是错误的决定,因为需要设置pernament Focus-
    setFocusable(true)

  • 不要对
    Swing JComponents
    使用
    KeyListener
    ,使用尽可能高的抽象,使用
    KeyBindings
    (在此处搜索代码示例)

  • 默认情况下,
    JFrame
    从不对
    KeyEvent
    侦听的
    KeyListener

  • JFrame
    不可聚焦
    JComponent
    ,您需要使用可聚焦contianer e,g,
    JPanel
    ,但同样是错误的决定,因为需要设置pernament Focus-
    setFocusable(true)

  • 不要对
    Swing JComponents
    使用
    KeyListener
    ,使用尽可能高的抽象,使用
    KeyBindings
    (在此处搜索代码示例)

  • +1,例如+1,例如