简体   繁体   English

如何为我的 GUI 实现重置按钮?

[英]How do I implement a reset button for my GUI?

I am an AP Computer Science student and I need help with my assignment for the class.我是一名 AP 计算机科学专业的学生,​​我需要帮助完成课程作业。 My assignment is to create a simple GUI or game using Eclipse.我的任务是使用 Eclipse 创建一个简单的 GUI 或游戏。 I made a simple player vs. player tic-tac-toe game, but I do not know how to create a "reset" button for my GUI.我制作了一个简单的玩家与玩家井字棋游戏,但我不知道如何为我的 GUI 创建一个“重置”按钮。 I tried multiple times, but I can't get it to work or show up in my GUI.我尝试了多次,但我无法让它工作或显示在我的 GUI 中。 I would appreciate some pointers on how to implement a functional reset button, so I would not have exit out of my GUI multiple times to start playing again.我会很感激有关如何实现功能重置按钮的一些指示,所以我不会多次退出我的 GUI 重新开始播放。 Here is the code I have written so far.这是我到目前为止编写的代码。

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();
    }
}

You might want to try this:你可能想试试这个:

    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

Of course, you will have to add your 9 buttons to panel now, not to window .当然,您现在必须将 9 个按钮添加到panel而不是window

But why don't you just reset automatically after the user confirmed the dialog at the end of the game?但是为什么不在游戏结束时用户确认对话后自动重置?

Reset your board after a tie or win.平局或获胜后重置您的棋盘。 An example reset method.一个示例重置方法。 Otherwise you are going to have to make room on your Frame to hold a button to do this.否则,您将不得不在 Frame 上腾出空间来按住按钮来执行此操作。

private void ResetBoard() {
  for(int i = 0; i < 9; i++) {
    button[i].setText("");
    button[i].setEnabled(true);
    count = 0;
  }
}

Then use this method when a check is made to see if a player won or the game ends in a tie as below:然后在进行检查以查看玩家是否获胜或游戏以平局结束时使用此方法,如下所示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM