gpt4 book ai didi

java - 在 while 循环中等待用户操作 - JAVA

转载 作者:行者123 更新时间:2023-12-01 19:17:02 24 4
gpt4 key购买 nike

我正在编写一个黑白棋应用程序。我实现了turns管理器类,但是在while循环中遇到了一些问题。

这是我的片段:

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);
}
}
}

最佳答案

我同意霍华德的评论……这看起来设计得很错误。使用监听器和事件意味着您(大多数时候)不必自己使用事件循环。

尝试以下操作:创建一个包含您的板的类。董事会知道每个字段的颜色(以及它需要知道的其他一切)。当您的 GUI 初始化时,您将创建单个 EventListener 来调用板对象的某些方法。此方法传递了被单击的字段(我想它被单击了,还是我错了?)。您可以将此 EventListener 的引用存储在变量中。然后循环遍历每个 for 和列,并将此监听器附加到每个字段。然后显示 GUI。

让我澄清一下:所有这些都是在初始化时完成的。

关于java - 在 while 循环中等待用户操作 - JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com