尝试使用JFrames在核心Java中借助箭头键移动矩形

尝试使用JFrames在核心Java中借助箭头键移动矩形,java,animation,keylistener,Java,Animation,Keylistener,我制作了一个程序,在这个程序中,我试图用箭头键向下移动一个矩形。但它并没有移动。这是我的密码。谁能帮帮我,告诉我为什么它不动了?我还在key-down事件中添加了一个System.out.print(),但它没有在控制台上显示任何输出。keyevent部分似乎不起作用 `import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; i

我制作了一个程序,在这个程序中,我试图用箭头键向下移动一个矩形。但它并没有移动。这是我的密码。谁能帮帮我,告诉我为什么它不动了?我还在key-down事件中添加了一个System.out.print(),但它没有在控制台上显示任何输出。keyevent部分似乎不起作用

  `import java.awt.event.KeyAdapter;
   import java.awt.event.KeyEvent;
   import java.awt.event.KeyListener;

   import javax.swing.ImageIcon;
   import javax.swing.JFrame;
   import javax.swing.JLabel;

public class MovingBoxWithArrowKeys extends JFrame
{
    JLabel l ;

public MovingBoxWithArrowKeys(String title)
{
    super(title);


    l = new JLabel(new ImageIcon("download-box-icon.png"));
    //l.setLocation(10 , 10 );
    l.setBounds(10 , 10 , 400 , 400 );
    l.setVisible(true);
    l.isOptimizedDrawingEnabled();
    l.requestFocusInWindow();
    //l.requestFocus();
    l.addKeyListener(new KeyAdapter() 
    {
        public void keyPressed(KeyEvent k)
        {
            if(k.getKeyCode() == KeyEvent.VK_DOWN)
            {
                l.setLocation(l.getX(), l.getY()+1);
                repaint();
                System.out.print("Down Pressed");
            }
        }
    });



    setLayout(null);
    setSize(this.getMaximumSize());
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
    //requestFocus();

    getContentPane().add(l);
    //add(l);
}
public static void main(String args[])
{
    MovingBoxWithArrowKeys m = new MovingBoxWithArrowKeys("Moving Box With Keys");

}
}`

您的
keylister
需要添加到
JFrame
中,因为它只适用于具有实际焦点的组件。这不是你的
JLabel
而是你的
JFrame

即使您使用
l.requestFocusInWindow()请求焦点
在初始化代码中,它将丢失到
JFrame
中,因为它是无法保持焦点的组件之一

因此,只需改变这一点:

l.addKeyListener(new KeyAdapter() {...}
对此

addKeyListener(new KeyAdapter() {...}

好极了非常感谢你。矩形现在移动得很好。