Рисуйте различные объекты с помощью таймера в цикле for - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы нарисовать несколько объектов на JPanel с паузой между каждой краской. Между каждым объектом также есть промежуток, который я просто вычисляю в цикле for.

Имея это в виду, я решил использовать java.util.Timer с пользовательским классом, расширяющим класс TimerTask (так как мне нужно, чтобы разрыв вычислялся динамически).

Дело в том, что когда я пытаюсь сделать это таким образом, ничего не отображается, но работает таймер, поскольку он отображает строку в журнале консоли. Хотя, когда я просто вызываю функцию в цикле for, объекты хорошо отображаются. Так что я не совсем понимаю, что я сделал не так.

Вот мой код:

public class GameScreen extends JPanel {

    Turn turn;

    public GameScreen(Turn t) {
        super();
        this.turn = t;
    }

    public void paintComponent(Graphics g){
        this.setBackground(Color.decode("#ADCCDB"));

        if(this.turn.boolAction) {
            this.action(g, this.turn.listObjects);
        }
    }  

    public void action(Graphics g, ArrayList<Objects> listObject) {

        class PaintTask extends TimerTask{

            int i;

            public PaintTask(int i){
                super();
                this.i = i;
            }

            @Override
            public void run() {
                System.out.println(new Date() + " Task Executed");
                listObject.get(this.i).paint(g, 30, 30 + 60*this.i);
            }

        }
        Timer timer = new Timer();
        for(int i = 0; i < listObject.size(); i++) {
            timer.schedule(new PaintTask(i), 1000, 3000);
        }

        /*for(int i = 0; i < listObject.size(); i++) {
            action.get(i).paintHide(g, 30, 30 + 60*i);
        }*/
    }
}

Кто-нибудь знает, что здесь не так?

Заранее спасибо!

...