我目前正在研究一个 Java 类,它产生一个简单的井字游戏的 JFrame/JButton 布局。实现 ActionListener,我打算让选定的 JButton 将其标题设置为“X”或“O”(基于是否轮到 X 选择 JButton 的布尔语句)并禁用(因此无法播放在接下来的轮次顶部)。我创建的当前应用程序执行此操作,但它有时不会更改 JButton 文本或禁用该按钮,直到我单击另一个按钮。当我单击其中一个 JButton 时,似乎没有任何一种连贯的顺序会发生这种情况。我花了几个小时试图解决这个问题,但无济于事。我如何编写 actionPerformed 方法或如何将其添加到 JButtons 是否存在问题?
这是我的课程的代码:
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
public class TTT extends JFrame implements ActionListener{
// private fields
private JButton[] buttonArray;
private JLabel prompt;
private boolean turnX;
private String letter;
public TTT() {
// Instantiates JFrame window and adds lines to board
super.setSize(235, 280);
super.setTitle("Tic-Tac-Toe");
// Instantiates JButton array
buttonArray = new JButton[9];
// Loop that creates the JButton squares
for(int y = 30; y <= 140; y += 55) {
for(int x = 30; x <= 140; x += 55) {
for(int index = 0; index < buttonArray.length; index++) {
buttonArray[index] = new JButton();
buttonArray[index].setSize(50, 50);
buttonArray[index].setLocation(x, y);
buttonArray[index].addActionListener(this);
super.add(buttonArray[index]);
}
}
}
prompt = new javax.swing.JLabel("X's TURN");
prompt.setVerticalAlignment(JLabel.BOTTOM);
super.add(prompt);
turnX = true;
super.setVisible(true);
}
public void actionPerformed(java.awt.event.ActionEvent a) {
// Calculate whose turn it is
if(turnX){
letter = "X";
prompt.setText("O's TURN");
turnX = false;
} else if(!turnX){
letter = "O";
prompt.setText("X's TURN");
turnX = true;
}
JButton pressedButton = (JButton)a.getSource();
pressedButton.setText(letter);
pressedButton.setEnabled(false);
super.repaint();
}
public static void main(String[] args) {
new TTT();
}
}