gpt4 book ai didi

java - 如何用方向键移动矩形?

转载 作者:行者123 更新时间:2023-12-02 04:40:32 24 4
gpt4 key购买 nike

我有一个框架,里面有一个矩形。我想知道如果单击箭头键如何移动矩形。我进行了搜索,发现了一些例子,但没有任何效果(很奇怪,因为这应该是一件简单的事情)

这是我的矩形类:

 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);
}
}

最佳答案

这里有很多问题:

问题在于您的矩形绘图是硬编码的,如下所示:

public void paint(Graphics g){
g.setColor(Color.RED);
g.fillRect(125, 480, 60, 10);
}

您需要使用 x 变量而不是 125

为了接受按键事件,您的 JPanel 需要接受焦点,这可以通过以下几行来实现:

setFocusable(true);
requestFocusInWindow();

您现在将接收键盘事件并更改您的 x 值。不幸的是,这不会触发重新绘制,因此您的盒子仍然不会移动。

你真的应该进一步分解你的类,因为你的职责分配有点奇怪。当发生关键事件时,您需要告诉您的 JPanel repaint() 本身,以便更新反射(reflect)在屏幕上。

关于java - 如何用方向键移动矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com