我在 java 中有一个内置的 tictactoe,但由于某种原因,重置和退出按钮不起作用。我无法解决这个问题。我搜索了其他问题,但无法找出我的代码的问题。该代码位于单独的类中。还有一个主类调用该对象来运行程序。
按钮阵列工作正常。 O 和 X 完全按照我想要的方式工作,但带有重置和退出按钮的第二个面板不起作用。该程序在 GUI 中。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Frame1 implements ActionListener {
private JButton[] board;
private int turn;
private JButton reset;
private JButton exit;
public Frame1() {
turn = 1;
JFrame frm = new JFrame("Chess");
JButton reset = new JButton("Reset");
JButton exit = new JButton("Exit");
frm.setSize(300, 300);
JPanel LowerPanel = new JPanel();
LowerPanel.add(reset);
LowerPanel.add(exit);
exit.addActionListener(this);
reset.addActionListener(this);
board = new JButton[9];
JPanel CenterPanel = new JPanel();
CenterPanel.setLayout(new GridLayout(3, 3));
for (int i = 0; i < 9; i++) {
board[i] = new JButton();
board[i].setFont(new Font("Arial", Font.BOLD, 72));
CenterPanel.add(board[i]);
board[i].addActionListener(this);
}
frm.add(CenterPanel, BorderLayout.CENTER);
frm.add(LowerPanel, BorderLayout.SOUTH);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == reset) {
for (int i = 0; i > 9; i++) {
board[i].setText(" ");
board[i].setEnabled(true);
turn = 1;
}
}
if (e.getSource() == exit) {
System.exit(0);
}
for (int i = 0; i < 9; i++) {
if (e.getSource() == board[i]) {
if (turn == 1) {
board[i].setText("X");
board[i].setEnabled(false);
} else {
board[i].setText("O");
board[i].setEnabled(false);
}
turn = (turn + 1) % 2;
return;
}
}
}
}
我希望按钮能够正常工作。如果你能帮我解决这个问题,那将是一个很大的帮助
最佳答案
看看
JButton reset = new JButton("Reset");
JButton exit = new JButton("Exit");
您将按钮分配给局部变量,但在 actionPerformed() 中您正在访问对象属性。
尝试
reset = new JButton("Reset");
exit = new JButton("Exit");
关于java - 无法找出我的程序中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53883056/