私は前にここにこの質問をしてきましたが、それはあまりにも非特異的だったし、「最小限の再現性の例」を備えていなかったので、それが降ろされてしまいました。:)
基本的に私は、ユーザーがクリックし、「スタート」とすぐに、次のように私のアルゴリズムは行きたいです:
- ボタンの4×4グリッド上で、ランダム化ボタンは、間に500ミリ秒の遅延で、次に黒、赤に変わり。
- これは、6回繰り返されます
ここで私は悪意を遅延するための「タイマー」を実装しようとしましたが、失敗しましたコードは次のとおりです。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestMemoryGame extends JFrame {
private JButton[] button = new JButton[16];
private JButton start;
private JPanel grid;
private int counter = 6;
private Timer timer;
private int delay = 500;
private Color babyBlue = new Color(137, 156, 240);
private Color lightRed = new Color(255,69,0);
public TestMemoryGame() {
super();
init();
}
public void init() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new GridBagLayout());
setSize(500, 500);
setBackground(Color.WHITE);
grid = new JPanel(new GridLayout(4, 4));
for (int x = 0; x < 16; x++) {
button[x] = new JButton();
button[x].setBackground(babyBlue);
grid.add(button[x]);
}
grid.setPreferredSize(new Dimension(400, 400));
add(grid);
start = new JButton("START");
start.setBackground(Color.ORANGE);
start.setPreferredSize(new Dimension(150, 30));
GridBagConstraints c = new GridBagConstraints();
c.gridy = 1;
c.insets.top = 10;
add(start, c);
start.addActionListener(startTimer);
timer = new Timer(delay, action);
pack();
setVisible(true);
}
ActionListener startTimer = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timer.start();
}
};
ActionListener action = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int[] array = new int[counter];
for (int x = 0; x < counter; x++) {
array[x] = (int)(Math.random() * 16);
button[array[x]].setBackground(lightRed);
timer.start();
//Delay of 500
timer.stop();
button[array[x]].setBackground(Color.black);
}
}
};
public static void main(String[] args) {
new TestMemoryGame();
}
}
私は非常に多くの異なるアプローチでこれを試してみたが、私はちょうど正しく「タイマー」を使用する方法を得るように見えることはありません。誰かがしようとすると、単にこれまでの任意の場所に私をリードしていない私にそれを説明するために、以下のコードでそれを実装するために時間がかかった場合、私は本当に、感謝します。:(
どうもありがとう!
:私はあなたの最後の質問であなたの要件の一つ読み違えたActionListener内のJava Swingで特定の遅延を?私はより多くのスペースを持っているところなので、私は再びここに私の提案を修正再表示されます:
あなたのクラスでは:
- あなたはActionListenerにでのArrayListにアクセスできるようにインスタンス変数としてのArrayListを作成します。
あなたがボタンに追加したActionListenerでは、する必要があります。
- あなたはArrayListに色を切り替えたい6つのランダムボタンを追加します。あなたがランダムに6つのボタンを選択するためのループを作成しますので。
- ArrayListの中で最初のボタンの色を設定します
- タイマーを開始
タイマーのActionListenerの中で、あなたはその後になります。
- ArrayListの中で最初のボタンの色をリセット
- ArrayListのからの最初のボタンを削除します
- ArrayListのが空の場合は、タイマーを停止します
- それ以外の最初のボタンを取得し、色を赤に変更
だから、あなたは、[スタート]ボタンをクリックすると、最初のボタンが赤に着色されています。それはデフォルトにリセットされ、別のボタンが変更された後に、その時点でタイマー火災の500ミリ秒まで赤のままです。タイマーは500ミリ秒に再び発火するとプロセスが繰り返し続けます。
タイマーのActionListenerのにはループコードがないか注意してください。あなたはタイマーを停止するまで、タイマは、イベントごとに500ミリ秒を生成し続けます。
あなたはより多くの助けを必要とする場合は、新しいスレッドを作成していない、質問のフォローアップをお願いします。