【问题标题】:Better JLabel movement with KeyListeners [closed]使用 KeyListeners 更好地移动 JLabel [关闭]
【发布时间】:2013-07-31 13:49:06
【问题描述】:

我在使用 KeyListener 移动 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);
        }
    }
});

【问题讨论】:

    标签: java swing jlabel keylistener


    【解决方案1】:
    1. 默认情况下JFrame 不会对KeyEvent 做出反应,KeyListener 监听

    2. JFrame 不可聚焦 JComponent,您需要使用可聚焦的容器,例如 JPanel,但又是错误的决定,因为需要设置永久焦点 - setFocusable(true)

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多