[英]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
創建一個ActionListener
和Timer
的單個實例以及某種狀態標志。
ActionListener
將檢查標志的狀態,並根據其值采取適當的措施
必要時,您可以設置標志狀態並啟動Timer
。
恕我直言,由於所有狀態都被組合在一起,而不是被隔離在單獨的塊中,因此這使得代碼變得不那么靈活。
您也可以使用這個想法,但是不用在外部設置標志,只需在啟動Timer
時准備狀態,並允許ActionListener
更改狀態,就可以在Timer
每個刻度上移動標志。
這意味着您可以將Timer
設置為重復,並且每個刻度將執行不同的操作,完成后在ActionListener
停止Timer
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.