变量不会更新(用Java)

时间:2012-08-06 02:07:31

标签: java variables updating

我正在努力完成我正在进行的游戏;此代码的目的是更改窗口上JComponent的位置。这就是我想要的方式:

1:程序启动,JFrame创建为640x640像素; JComponent直接绘制在中心。

2:当按下“ESC”时,JFrame会全屏爆炸; JComponent直接绘制在中心。

3:当JFrame全屏显示时按下“ESC”,它将恢复原始大小。

我遇到的问题是,尽管我努力更新变量,但JComponent并没有被重新绘制到全屏的中心。我决定尝试通过三个System.out.println测试来调试它:第一个,“A”,在setLocation方法中打印参数“loc”的值。第二个“B”,在将值从原始值更改为参数给定的值后,打印Point“location”的值。

第三个测试“C”,恰好在setLocation中通过重绘调用paintComponent方法时给出,它打印像test“B”这样的位置值。事情搞砸了。

首次绘制JFrame时会给出第一组测试;每个测试中JComponent的位置相同。调整JFrame大小时会给出第二组测试;应该在setLocation方法中更新JComponent的位置,如“A”和“B”所示。但是,当我在测试“C”中调用该位置时,该位置将恢复为JFrame的原始位置。

public void setLocation(Point loc)
{
    location = new Point(loc.x, loc.y);
    System.out.println(loc + "A"); System.out.println(location + "B");
    repaint();
}
public void paintComponent(Graphics g)
{
    System.out.println(location + "C");
    Graphics2D g2 = (Graphics2D)(g);

    BufferedImage x = null;
    if(isMale)x = mobs[0];  else    x = mobs[1];
    g2.drawImage(rotate(x, direction), null, (int)location.getX(), (int)location.getY());
}

private Point location = new Point(280, 280);

输出:

java.awt.Point中[X = 280,Y = 280]甲

java.awt.Point中[X = 280,Y = 280]乙

java.awt.Point [x = 280,y = 280] C

java.awt.Point中[X = 1880,Y = 1040]甲

java.awt.Point [x = 1880,y = 1040] B

java.awt.Point中[X = 280,Y = 280]ç

java.awt.Point中[X = 280,Y = 280]甲

java.awt.Point中[X = 280,Y = 280]乙

java.awt.Point中[X = 280,Y = 280]ç

如果有人可以帮我弄清楚为什么Point“location”在更新后没有留在(1880,1040),然后重新绘制,我真的很感激。

1 个答案:

答案 0 :(得分:2)

我会将此更改为答案:

你的setLocation(...)方法覆盖不应该调用它的超级方法吗?如果没有,它将不会做它需要做的事情。而且我不确定它应该调用repaint()。另外,您的容器使用什么布局来保存JComponent?有几种方法可以将组件集中在容器中,包括使用GridBagLayout并添加没有GridBagConstraints的组件,这是默认方式。最后,考虑创建并发布sscce以更好地展示您的问题。