【发布时间】:2015-07-26 02:00:20
【问题描述】:
我有一个框架,它是一个矩形。 如果单击箭头键,我想知道如何将矩形移入。 我搜索了一些示例,但没有任何效果(很奇怪,因为它应该是一件简单的事情)
这是我的 Rectangle 类:
public class PlayerOne implements KeyListener {
int x,y;
public PlayerOne(JPanel panel){
this.x = panel.getWidth()/2;
this.y = panel.getHeight()/2;
}
public void paint(Graphics g){
g.setColor(Color.RED);
g.fillRect(125, 480, 60, 10);
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
int keyCode = arg0.getKeyCode();
if(keyCode == arg0.VK_KP_RIGHT){
this.x+=5;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
这是主要的:
public class PingPong extends JPanel {
private static final long serialVersionUID = -4170574729049260633L;
//Initialize
Table table = new Table();
PlayerOne po = new PlayerOne(this);
public void paintComponent(Graphics g){
super.paintComponent(g);
table.paint(g);
po.repaint(g);
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setTitle("Pong");
frame.setSize(326, 533);
frame.add(new PingPong()).setBackground(Color.DARK_GRAY);
frame.getContentPane().setBackground(Color.DARK_GRAY);
frame.setVisible(true);
}
}
【问题讨论】:
-
你需要一个
KeyListener。 -
@CoolGuy 我添加了一个,但我不知道如何使矩形移动...我编辑了我的帖子,你可以看看吗?
-
通过使用 KeyBindigs 而不是 KeyListener,paint 应该是 paintComponent(带有 super.paintComponent),而不是 KeyListener 的成员或除了真正的 JComponent 之外的其他任何东西,例如JPanel,绘画应该由来自paintComponent的动作而不是自身(可能导致无限循环)的repaint()初始化
-
尝试在
PlayerOne中将paint的名称更改为repaint。在这里this.x+=5;你只需增加x的值。您的程序中没有任何内容使用它。你希望矩形如何移动?也许您需要将fillRect的第一个参数更改为x? -
@CoolGuy 好的,我做到了,但它仍然不会移动。请考虑到我对 Java 图形和 Java 很陌生。
标签: java swing jpanel paintcomponent keylistener