Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用计时器更新点的图形_Java_Swing_Graphics_Timer_Paintcomponent - Fatal编程技术网

Java 使用计时器更新点的图形

Java 使用计时器更新点的图形,java,swing,graphics,timer,paintcomponent,Java,Swing,Graphics,Timer,Paintcomponent,在我提问之前,我为任何不一致之处道歉。我对这方面还不太熟悉。 我正在制作一个游戏,目前看起来像这样(图片并不重要): 红点应该向右移动,它们通过计时器来实现。这个很好用。但图形不会更新,因此我必须来回拖动窗口的侧面,以查看我的点是否在移动。我能做些什么来解决这个问题 我的mainclass中的paintcomponent方法: public void paintComponent(Graphics g){ super.paintComponent(g); for (in

在我提问之前,我为任何不一致之处道歉。我对这方面还不太熟悉。 我正在制作一个游戏,目前看起来像这样(图片并不重要):

红点应该向右移动,它们通过计时器来实现。这个很好用。但图形不会更新,因此我必须来回拖动窗口的侧面,以查看我的点是否在移动。我能做些什么来解决这个问题

我的mainclass中的paintcomponent方法:

    public void paintComponent(Graphics g){
    super.paintComponent(g);
    for (int x = 0; x < SomeInts.amount; x++){
        for (int y = 0; y < SomeInts.amount; y++){
            tile[x][y].colorBody(g, x, y);              
            Tower temp;
            for (int i = 0; i < towers.size(); i++){        
                temp = towers.get(i);
                temp.colorBody(g, tile[x][y].getSize());
                temp.guard.colorBody(g, tile[x][y].getSize());                        
            }
        }
    }
}
}


谢谢您的时间。

我在这里有点猜测,但我认为您需要调用repaint()方法来查看所做的更改。

可能的原因是您正在更新EDT-使用swing.Timer,而不是util版本。您能给我一个例子吗?“它似乎不是以同样的方式工作的”。@ZachariasHortén:看到了。我现在已经解决了这个问题。谢谢你的帮助!添加对
javax.swing.Timer
的引用,而不是
java.util.Timer
,您得到了一个冠军答案;)计时器的工作方式似乎不一样。另外,我应该在哪里调用repaint()方法?@zachariashorten:当您将使用
javax.swing.Timer
,然后在所述计时器的actionPerformed()方法中,添加
repaint()
调用,以使事情可见。这可能会证明是有用的,所有与此相关的好例子。
public class Guard {
int x, y, size = 10, towerx, towery;
Timer timer;
public Guard(int towerx1, int towery1){
    towerx = towerx1;
    towery = towery1;
    x = towerx + 1;
    y = towery;
    new Timer().schedule(new MyTask(), 1000, 1000);
}

public void colorBody(Graphics g, int tilesize){
    g.setColor(new Color(255, 0, 0));
    g.fillOval(x * tilesize + tilesize / 4, y * tilesize + tilesize / 4, size, size);       
}

public class MyTask extends TimerTask {
    public void run() {
        x++;
    }
}