Java 如何为GUI实现重置按钮?

Java 如何为GUI实现重置按钮?,java,user-interface,Java,User Interface,我是AP计算机科学专业的学生,我需要帮助完成课堂作业。我的任务是使用Eclipse创建一个简单的GUI或游戏。我做了一个简单的玩家对玩家的tic tac toe游戏,但我不知道如何为我的GUI创建一个“重置”按钮。我尝试了多次,但都无法使其工作或显示在GUI中。我希望能得到一些关于如何实现功能重置按钮的建议,这样我就不会多次退出GUI重新开始播放了。这是我到目前为止编写的代码 package gui; import java.awt.*; import java.awt.event.*; im

我是AP计算机科学专业的学生,我需要帮助完成课堂作业。我的任务是使用Eclipse创建一个简单的GUI或游戏。我做了一个简单的玩家对玩家的tic tac toe游戏,但我不知道如何为我的GUI创建一个“重置”按钮。我尝试了多次,但都无法使其工作或显示在GUI中。我希望能得到一些关于如何实现功能重置按钮的建议,这样我就不会多次退出GUI重新开始播放了。这是我到目前为止编写的代码

package gui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TicTacToeGUI implements ActionListener 
{
    JFrame window = new JFrame("Tic-Tac-Toe");
    JButton[] button;
    JButton reset = new JButton("Reset"); 
    String letter = "";
    public int count = 0;
    public boolean win = false;

    public TicTacToeGUI()
    {
        button = new JButton[9];
        window.setSize(300,300);
        window.setLayout(new GridLayout(3,3));
        JButton dummy = new JButton("");
        Font font = dummy.getFont();
        Font bigFont = font.deriveFont(font.getSize2D() * 5.0f);
        JButton reset = new JButton("Reset");
        for(int i = 0; i < 9; i++) 
        {
            button[i] = new JButton("");
            button[i].setFont(bigFont);
            button[i].addActionListener(this);
            window.add(button[i]);
        }
        window.setVisible(true);
    }

    public void actionPerformed(ActionEvent a) 
    {
        count++;

        if(count % 2 == 1)
        {
            letter = "X";
        }
        else
        {
            letter = "O";
        }

        Object but = a.getSource();

        for(int i = 0; i < 9; i++) 
        {
            if(but == button[i]) 
            {
                button[i].setText(letter);
                button[i].setEnabled(false);
                break;
            }
        }

        if( button[0].getText() == button[1].getText() && button[1].getText() == button[2].getText() && button[0].getText() != "")
        {
            win = true;
        }
        else if(button[3].getText() == button[4].getText() && button[4].getText() == button[5].getText() && button[3].getText() != "")
        {
            win = true;
        }
        else if(button[6].getText() == button[7].getText() && button[7].getText() == button[8].getText() && button[6].getText() != "")
        {
            win = true;
        }
        else if(button[0].getText() == button[3].getText() && button[3].getText() == button[6].getText() && button[0].getText() != "")
        {
            win = true;
        }
        else if(button[1].getText() == button[4].getText() && button[4].getText() == button[7].getText() && button[1].getText() != "")
        {
            win = true;
        }
        else if(button[2].getText() == button[5].getText() && button[5].getText() == button[8].getText() && button[2].getText() != "")
        {
            win = true;
        }
        else if(button[0].getText() == button[4].getText() && button[4].getText() == button[8].getText() && button[0].getText() != "")
        {
            win = true;
        }
        else if(button[2].getText() == button[4].getText() && button[4].getText() == button[6].getText() && button[2].getText() != "")
        {
            win = true;
        }
        else 
        {
            win = false;
        }

        if(win == true)
        {
            JOptionPane.showMessageDialog(null, letter + " WINS!");
        } 
        else if(count == 9 && win == false)
        {
            JOptionPane.showMessageDialog(null, "Tie Game!");
        }
    }

    public static void main(String[] args)
    {
        new TicTacToeGUI();
    }
}
packagegui;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类TictoEGUI实现ActionListener
{
JFrame窗口=新JFrame(“Tic Tac Toe”);
JButton[]按钮;
JButton reset=新JButton(“reset”);
字符串字母=”;
公共整数计数=0;
公共布尔赢=假;
公共图书馆
{
按钮=新的JButton[9];
设置窗口大小(300300);
setLayout(新的GridLayout(3,3));
JButton dummy=新JButton(“”);
Font=dummy.getFont();
Font bigFont=Font.deriveFont(Font.getSize2D()*5.0f);
JButton reset=新JButton(“reset”);
对于(int i=0;i<9;i++)
{
按钮[i]=新的JButton(“”);
按钮[i]。设置字体(大字体);
按钮[i].addActionListener(此);
添加(按钮[i]);
}
window.setVisible(true);
}
已执行的公共无效操作(操作事件a)
{
计数++;
如果(计数%2==1)
{
字母=“X”;
}
其他的
{
字母=“O”;
}
对象but=a.getSource();
对于(int i=0;i<9;i++)
{
如果(但==按钮[i])
{
按钮[i].setText(字母);
按钮[i].setEnabled(假);
打破
}
}
如果(按钮[0]。getText()==按钮[1]。getText()&&按钮[1]。getText()==按钮[2]。getText()&&按钮[0]。getText()!=“”)
{
赢=真;
}
else if(按钮[3]。getText()==按钮[4]。getText()&&按钮[4]。getText()==按钮[5]。getText()&&按钮[3]。getText()!=“”)
{
赢=真;
}
else if(按钮[6]。getText()==按钮[7]。getText()&&按钮[7]。getText()==按钮[8]。getText()&&按钮[6]。getText()!=“”)
{
赢=真;
}
else if(按钮[0]。getText()==按钮[3]。getText()&&按钮[3]。getText()==按钮[6]。getText()&&按钮[0]。getText()!=“”)
{
赢=真;
}
else if(按钮[1]。getText()==按钮[4]。getText()&&按钮[4]。getText()==按钮[7]。getText()&&按钮[1]。getText()!=“”)
{
赢=真;
}
else if(按钮[2]。getText()==按钮[5]。getText()&&按钮[5]。getText()==按钮[8]。getText()&&按钮[2]。getText()!=“”)
{
赢=真;
}
else if(按钮[0]。getText()==按钮[4]。getText()&&按钮[4]。getText()==按钮[8]。getText()&&按钮[0]。getText()!=“”)
{
赢=真;
}
else if(按钮[2]。getText()==按钮[4]。getText()&&按钮[4]。getText()==按钮[6]。getText()&&按钮[2]。getText()!=“”)
{
赢=真;
}
其他的
{
赢=假;
}
如果(win==真)
{
showMessageDialog(空,字母+WINS!”);
} 
else if(计数=9&&win==false)
{
showMessageDialog(null,“平局游戏!”);
}
}
公共静态void main(字符串[]args)
{
新的TicTacToeGUI();
}
}

您可能想尝试以下方法:

    window.setLayout(new  BorderLayout());
    JPanel panel = new JPanel( new GridLayout(3, 3)); 
    window.add(panel, BorderLayout.CENTER);  // add panel to window center
    window.add(reset, BorderLayout.SOUTH);   // add reset button to window bottom
当然,您现在必须将9个按钮添加到
面板
,而不是
窗口


但是为什么不在游戏结束时用户确认对话框后自动重置呢?

在平局或获胜后重置棋盘。示例重置方法。否则,您将不得不在您的框架上腾出空间来按住按钮来执行此操作

private void ResetBoard() {
  for(int i = 0; i < 9; i++) {
    button[i].setText("");
    button[i].setEnabled(true);
    count = 0;
  }
}
if(win == true)
{
   JOptionPane.showMessageDialog(null, letter + " WINS!");
   ResetBoard();
} 
else if(count == 9 && win == false)
{
   JOptionPane.showMessageDialog(null, "Tie Game!");
   ResetBoard();
}