簡體   English   中英

Java Swing計時器避免重復

[英]Java Swing Timers Avoid Repetition

在這個網站的慷慨用戶的大力支持下,我設法使計時器在我正在設計的程序中正常運行。 這是一小段代碼:

//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 您將需要提供適當的方法來設置您需要在類之間攜帶的任何狀態。

然后為所需的每個Timer創建一個實例,並為其分配相應的操作類(您之前創建的),並根據需要使用isRunning並在需要使用它們時restart

你可以...

創建一個ActionListenerTimer的單個實例以及某種狀態標志。

ActionListener將檢查標志的狀態,並根據其值采取適當的措施

必要時,您可以設置標志狀態並啟動Timer

恕我直言,由於所有狀態都被組合在一起,而不是被隔離在單獨的塊中,因此這使得代碼變得不那么靈活。

您也可以使用這個想法,但是不用在外部設置標志,只需在啟動Timer時准備狀態,並允許ActionListener更改狀態,就可以在Timer每個刻度上移動標志。

這意味着您可以將Timer設置為重復,並且每個刻度將執行不同的操作,完成后在ActionListener停止Timer ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM