Java Swing计时器避免重复
在这个网站慷慨的用户的帮助下,我成功地使我的计时器在我正在设计的程序中正常工作。下面是代码的一小部分:Java Swing计时器避免重复,java,swing,timer,Java,Swing,Timer,在这个网站慷慨的用户的帮助下,我成功地使我的计时器在我正在设计的程序中正常工作。下面是代码的一小部分: //Class represents what do when a button is pressed private static class ButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { them.setText("");
//Class represents what do when a button is pressed
private static class ButtonHandler implements ActionListener {
public void actionPerformed (ActionEvent e) {
them.setText("");
final JButton button = (JButton)e.getSource();
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String tc = random();
them.setText("They chose: " + tc + "!");
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
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();
}
});
timer.setRepeats(false);
timer.start();
}
}
我想做的是避免为了让它们连续开火而定义多个计时器。如果可以创建一个计时器类,在需要延迟时调用它,那将是最好的。如果我需要将“new ActionListener()”替换为“this”或其他内容,请通知我。我是java新手,我想弄清楚这一点,这样我就可以继续从事各种家庭项目。你可以。。。
为需要执行的每个操作创建一个类,实现ActionListener
。您需要提供适当的方法来设置在类之间需要携带的状态
然后为您需要的每个计时器创建一个实例,并为其分配适当的操作类(您之前创建的),并根据您的需要在需要时使用isRunning
和restart
你可以。。。
创建一个ActionListener
和一个Timer
的实例以及某种状态标志
ActionListener
将检查标志的状态,并根据其值采取适当的操作
需要时,可以设置标志状态并启动计时器
IMHO,这使得代码相当不灵活,因为所有状态都被分组在一起,而不是被隔离在单独的块中
您也可以使用此想法,但不需要在外部设置标志,只需在启动计时器时准备状态,并允许ActionListener
更改状态,然后在计时器的每个刻度上设置标志
这意味着您可以将计时器设置为重复,并且每个勾号将执行不同的操作,当您的任务完成时,停止ActionListener
中的计时器。我将使用一个,并简单地从上一个任务中安排一个新任务。不要忘记使用SwingUtilites.invokeLater
运行代码-否则您将违反Swing的线程策略。@HoverCraftFullOfels,按下按钮后,程序将休眠1000毫秒,然后显示一条消息,然后再次休眠并显示另一条消息。我想压缩它,所以我不需要重写定时器=新定时器等。。。只需键入一个处理计时器的类的名称。什么是标志?你的意思是检查某些条件的声明吗?然后在actionlistener中,我会根据某些操作更改标志,比如在显示消息之后?@user3534031:是的,这是我的建议——一个简单的计时器,根据其状态更改行为。