0

私は で作業してJFrameおり、while ループがあります。そのwhileループ内で、フレームの背景を黒に変更してから白に変更し、もう一度実行します。ただし、実際に表示できるように、変更の合間に 1 ~ 2 秒間一時停止する必要があります。Thread.sleep()、動作しTimerていないようです。誰でも助けることができますか?

4

1 に答える 1

0

timerfromを使用する場合swingは、次の方法が適切です。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.Timer;

public class Animation extends JFrame implements ActionListener {

private Timer t;
private Color myColor;
private int howManyTimesIwantThis;
private int count = 0;

public Animation() {
    t = new Timer(1000, this); // actionPerformed will be called every 1 sec
    t.start();
    this.howManyTimesIwantThis = 10;
    this.setVisible(true);
    this.setSize(500, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);

    myColor = Color.blue;
}

public void actionPerformed(ActionEvent e) {
    if (count < howManyTimesIwantThis) {
        count++;
        if (myColor.equals(Color.blue)) {
            myColor = Color.red;
        } else {
            myColor = Color.blue;
        }
        repaint(); //calls the paint method
    }
}

public void paint(Graphics g) {
    super.paint(g);

    g.setColor(myColor);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());

    g.dispose();
}

}

を使用したい場合はThread.sleep()、次のようにすることができます。

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Animation extends JFrame{

private Color myColor;
private int howManyTimesIwantThis;
private int count = 0;

public Animation() {
    this.howManyTimesIwantThis = 10;
    this.setVisible(true);
    this.setSize(500, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);

    myColor = Color.blue;
}

public void paint(Graphics g) {
    super.paint(g);

    while (count < howManyTimesIwantThis) {
        count++;
        if (myColor.equals(Color.blue)) {
            myColor = Color.red;
        } else {
            myColor = Color.blue;
        }
        g.setColor(myColor);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    g.dispose();
}

}

コードについてご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-10-29T16:59:37.420 に答える