我需要我的计时器重启或至少在执行一行代码后添加另一个延迟。
private static class ButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
final JButton button = (JButton)e.getSource();
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
String tc = random();
them.setText("They chose: " + tc + "!");
if (button == rock) {
whoWins("rock", tc);
} else if (button == paper) {
whoWins("paper", tc);
} else if (button == scissors) {
whoWins("scissors", tc);
}
yourWins.setText("Your wins: " + yw);
theirWins.setText("Their wins: " + tw);
}
});
timer.setRepeats(false);
timer.start();
}
}
我想在
之后立即实现计时器的第二次延迟them.setText("they chose: " + tc + "!");
但我不知道该怎么做,我应该重新启动计时器,如果是的话我会在哪里编写那行代码?提前谢谢。
答案 0 :(得分:2)
我打算将此发布到您的previous question,但似乎您已经取得了一些进展,做得很好。
好的,这个例子给你三个按钮可供选择。当您单击一个时,它会记录您选择的内容,禁用按钮并启动等待1秒的Timer
。
Timer
' s ActionListener
然后检查您选择的内容并更新输出,然后启动另一个等待1秒的Timer
,然后重新启用按钮...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Chocies {
public static void main(String[] args) {
new Chocies();
}
public Chocies() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JButton choice1;
private JButton choice2;
private JButton choice3;
private JLabel output;
private JButton choice;
public TestPane() {
setLayout(new BorderLayout());
choice1 = new JButton("Door 1");
choice2 = new JButton("Door 2");
choice3 = new JButton("Door 3");
JPanel panel = new JPanel();
panel.add(choice1);
panel.add(choice2);
panel.add(choice3);
output = new JLabel("Pick a door");
output.setHorizontalAlignment(JLabel.CENTER);
add(output, BorderLayout.NORTH);
add(panel);
ButtonHandler handler = new ButtonHandler();
choice1.addActionListener(handler);
choice2.addActionListener(handler);
choice3.addActionListener(handler);
}
public class ButtonHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
output.setText("Wait for it...");
choice = (JButton) e.getSource();
choice1.setEnabled(false);
choice2.setEnabled(false);
choice3.setEnabled(false);
Timer timer = new Timer(1000, new TimerHandler());
timer.setRepeats(false);
timer.start();
}
}
public class TimerHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (choice1 == choice) {
output.setText("Door 1 selected");
} else if (choice2 == choice) {
output.setText("Door 2 selected");
} else if (choice3 == choice) {
output.setText("Door 3 selected");
}
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
choice1.setEnabled(true);
choice2.setEnabled(true);
choice3.setEnabled(true);
}
});
timer.setRepeats(false);
timer.start();
}
}
}
}