Java Swing Timers避免重复

时间:2014-04-15 21:11:21

标签: 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("");
        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()"用"这个"什么的,请通知我。我是java的新手,我想知道这一点,所以我可以继续从事各种家庭项目。

1 个答案:

答案 0 :(得分:2)

你可以......

为您需要执行的每项操作创建一个类,实现ActionListener。您需要提供适当的方法来设置在类之间需要携带的状态。

然后创建您需要的每个Timer的实例,并为其分配相应的操作类(您之前创建的),并在需要时使用isRunningrestart,具体取决于根据您的需求

你可以......

创建ActionListenerTimer的单个实例以及某种状态标记。

ActionListener将检查标志的状态,并根据其值

采取适当的措施

如果需要,您可以设置标志状态并启动Timer

恕我直言,这使得代码相当不灵活,因为所有的状态都被组合在一起,而不是被单独的块隔离。

您也可以使用这个想法,但不是在外部设置标志,而是在启动Timer时准备状态,并允许ActionListener更改状态勾选Timer

这意味着您可以将Timer设置为重复,每个勾号都会执行不同的操作,当您完成时停止Timer内的ActionListener ...