无法在我的程序中找出问题

时间:2018-12-21 10:25:24

标签: java swing awt

我在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;

            }

        }

    }

}

我希望按钮可以工作。如果您能帮助我找出问题的话,那将是一个很大的帮助

2 个答案:

答案 0 :(得分:2)

看看

        JButton reset = new JButton("Reset");
        JButton exit = new JButton("Exit");

您正在将按钮分配给局部变量,但是在actionPerformed()中,您正在访问对象属性。

尝试

        reset = new JButton("Reset");
        exit = new JButton("Exit");

答案 1 :(得分:0)

actionPerformed方法无法访问resetexit变量,因为它们被Frame1实例化为局部变量

JButton reset = new JButton("Reset");
JButton exit = new JButton("Exit");

@Meini建议尝试

reset = new JButton("Reset");
exit = new JButton("Exit");

这会将resetexit的全局变量设置为等于所需的JButton,并允许actionPerformed方法访问它们。

也请在e.getSource() == reset if语句中修复循环。您必须先解决i > 9代码,才能使用重置功能。由于我从0开始,所以循环将不会运行,因为0不大于9。