0
我有一個帶有幾個JPanel的JFrame。一個是帶有JButtons GridLayout的boardPanel(4乘4)。另一個是controlPanel,它有一個包含一個JTextField和兩個JButton的FlowLayout。在for循環中禁用JPanel上的JComponents:令人討厭的延遲
我有兩種方法enableBoard()和disableBoard()。在這些方法中,我通過for循環setEnabled()將boardPanel和controlPanel中的每個組件設置爲true或false。這一切都發生在搖擺計時器正在運行時。當我啓動計時器並啓動enableBoard()(它通過disableBoard被禁用)時,它有點不穩定,但通常會有延遲,所以並不是所有的按鈕都會在同一時間被禁用,我懷疑它與Timer有關因爲延遲似乎在幾秒鐘內將發生的事情......下面是重要的方法:
public void disableBord() {
Component[] boardcomps = boardPanel.getComponents();
for(int i = 0; i < bordcomps.length; i++) {
boardcomps[i].setEnabled(false);
}
Component[] checkComps = controlPanel.getComponents();
for(int i = 0; i < checkComps.length; i++) {
checkComps[i].setEnabled(false);
}
}
public void enableBord() {
Component[] boardcomps = boardPanel.getComponents();
for(int i = 0; i < bordcomps.length; i++) {
boardcomps[i].setEnabled(true);
}
Component[] checkComps = controlPanel.getComponents();
for(int i = 0; i < checkComps.length; i++) {
checkComps[i].setEnabled(true);
}
}
而且運行定時器:
timer = new Timer(1000, new ActionListener() {
int time = game.getSeconds()+4;
@Override
public void actionPerformed(ActionEvent e) {
if (time == game.getSeconds()+4) {
lblFeedback.setText("3");
lblTime.setText(game.secToMinSec(game.getSeconds()));
time--;
} else if (time == game.getSeconds()+3) {
lblFeedback.setText("2");
lbltime.setText(game.secToMinSec(game.getSeconds()));
time--;
} else if (time == game.getSeconds()+2) {
lblFeedback.setText("1");
lblTime.setText(game.secToMinSec(game.getSeconds()));
time--;
} else if (time == game.getSeconds()+1) {
lblFeedback.setText("Start!");
lblTime.setText(game.secToMinSec(time));
time--;
enableBord();
} else if(time == 0) {
lblTime.setText("0:00");
lblFeedback.setText("Game finished!");
disableBord();
game.endeGame();
timer.stop();
} else if (time == game.getSeconds()) {
lblTime.setText(game.secToMinSec(time));
time--;
} else {
lblTime.setText(game.secToMinSec(time));
time--;
}
}
});
延遲看起來是這樣的:
如果沒有顯示證明問題的SSCCE,沒有幫助 – kleopatra 2013-03-06 16:04:56
@kleopatra這是不是足夠的信息?我只是在尋找知道可能是什麼問題的人,一個SSCCE需要一些時間,而且我的時間有點短暫:/ – 2013-03-06 16:14:26
計時器每秒鐘都會啓動。啓用/禁用組件的代碼將以毫秒爲單位執行,所以我加倍定時器是個問題。它看起來像是在EDT上執行啓用/禁用代碼,這是正確的,所以我沒有看到問題可能是什麼。我們也有有限的時間,沒有所有的事實只是猜測。 – camickr 2013-03-06 16:31:02