我制作了一个程序,我试图在箭头键的帮助下向下移动一个矩形。但它没有动。这是我的代码。任何人都可以帮助我,告诉我为什么不动?我还在按键事件中添加了一个System.out.print(),但它没有在控制台上显示任何输出。似乎关键事件部分无效。
`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");
}
}`
答案 0 :(得分:0)
您的KeyListener
需要添加到JFrame
,因为它仅适用于具有实际焦点的组件。那不是你JLabel
的{{1}}。
即使您在初始化代码中使用JFrame
请求焦点,也会将其丢失到l.requestFocusInWindow();
,因为它是无法保持焦点的组件之一
所以只需改变一下:
JFrame
到这个
l.addKeyListener(new KeyAdapter() {...}