我在寫一個Reversi應用程序。我實現了輪流管理器類,但是我在while循環中遇到了一些問題。等待while循環中的用戶操作 - JAVA
這是我的代碼片段:
while (!table.isFull() || passFlag != 2) {
if (player1.isActive()) {
for (int i = 0; i < table.getSize(); i++) {
for (int j = 0; j < table.getSize(); j++) {
table.getField(i, j).addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Field) {
((Field) e.getSource()).changeToBlack();
}
}
});
}
}
}
if (player2.isActive()) {
for (int i = 0; i < table.getSize(); i++) {
for (int j = 0; j < table.getSize(); j++) {
table.getField(i, j).addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Field) {
((Field) e.getSource()).changeToWhite();
}
}
});
}
}
}
sentinel.changeActivePlayer(player1, player2);
表是按鈕的網格,和字段的按鈕。循環不會等待玩家的互動。我如何實現代碼,以便它等待用戶點擊鼠標?
這是該類
package Core;
import GUILayer.Field;
import GUILayer.MainFrame;
import elements.Player;
import elements.Table;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TurnManager {
int passFlag = 0;
int TurnFlag = 0;
Sentinel sentinel = new Sentinel();
public TurnManager() {
}
public void manage(MainFrame mainframe, Table table, Player player1, Player player2) {
while (!table.isFull() || passFlag != 2) {
if (player1.isActive()) {
for (int i = 0; i < table.getSize(); i++) {
for (int j = 0; j < table.getSize(); j++) {
table.getField(i, j).addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Field) {
((Field) e.getSource()).changeToBlack();
}
}
});
}
}
}
if (player2.isActive()) {
for (int i = 0; i < table.getSize(); i++) {
for (int j = 0; j < table.getSize(); j++) {
table.getField(i, j).addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() instanceof Field) {
((Field) e.getSource()).changeToWhite();
}
}
});
}
}
}
sentinel.changeActivePlayer(player1, player2);
}
}
}
如果這是功課,請標記爲這樣。此外,該代碼可以受益於一些重構... – 2011-05-29 09:27:02
你能否提供一個更完整的例子。你的while循環在哪裏?在我看來,這是一個破碎的設計。 while循環將聽衆一遍又一遍地分配給你的按鈕。 – Howard 2011-05-29 09:27:38