Невозможно выяснить проблему в моей программе - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть встроенное tictactoe в Java, но по какой-то причине кнопки сброса и выхода не работают.Я не могу решить проблему.Я искал другие вопросы, но не смог выяснить проблему с моим кодом.Код находится в отдельном классе.Существует также основной класс, который вызывает объект для запуска программы.

Массив кнопок работает нормально.O и X работают точно так, как я хочу, но 2-я панель с кнопками сброса и выхода не работает.Программа в графическом интерфейсе.

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 голосов
/ 21 декабря 2018

Метод 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 равными требуемым JButtons и позволит методу actionPerformed получить к ним доступ.

Кроме того, исправьте ваш цикл внутри e.getSource() == resetесли заявление.Функция сброса не будет работать, пока вы не введете код i > 9.Поскольку я начинаю с 0, цикл не будет выполняться, поскольку 0 не больше 9.

0 голосов
/ 21 декабря 2018

Посмотрите на

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

Вы назначаете кнопки локальным переменным, но в actionPerformed () вы получаете доступ к свойствам объекта.

Попробуйте

        reset = new JButton("Reset");
        exit = new JButton("Exit");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...