我在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;
}
}
}
}
我希望按钮可以工作。如果您能帮助我找出问题的话,那将是一个很大的帮助
答案 0 :(得分:2)
看看
JButton reset = new JButton("Reset");
JButton exit = new JButton("Exit");
您正在将按钮分配给局部变量,但是在actionPerformed()中,您正在访问对象属性。
尝试
reset = new JButton("Reset");
exit = new JButton("Exit");
答案 1 :(得分:0)
actionPerformed
方法无法访问reset
和exit
变量,因为它们被Frame1
实例化为局部变量
JButton reset = new JButton("Reset");
JButton exit = new JButton("Exit");
@Meini建议尝试
reset = new JButton("Reset");
exit = new JButton("Exit");
这会将reset
和exit
的全局变量设置为等于所需的JButton,并允许actionPerformed
方法访问它们。
也请在e.getSource() == reset
if语句中修复循环。您必须先解决i > 9
代码,才能使用重置功能。由于我从0开始,所以循环将不会运行,因为0不大于9。