私は で作業してJFrame
おり、while ループがあります。そのwhileループ内で、フレームの背景を黒に変更してから白に変更し、もう一度実行します。ただし、実際に表示できるように、変更の合間に 1 ~ 2 秒間一時停止する必要があります。Thread.sleep()
、動作しTimer
ていないようです。誰でも助けることができますか?
質問する
132 次
1 に答える
0
timer
fromを使用する場合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 に答える