【问题标题】:Tic Tac Toe Java GUI setting up playing fieldTic Tac Toe Java GUI 设置游戏场地
【发布时间】:2023-04-07 00:46:01
【问题描述】:

我目前正致力于在 Java GUI 中编写一个简单版本的井字游戏。我在设置比赛场地时遇到问题。按钮代表玩家可以按下以获得“X”或“O”的方块。

 //Playing field class

 import java.awt.*;
 import java.awt.BorderLayout;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import java.awt.Color;
 class TicTacToeFrame extends JFrame {
     private JFrame game = new JFrame("Tic Tac Toe");
     private JPanel pane1, pane2, pane3;
     Button button = new Button();
     public TicTacToeFrame() {
         game.setSize(300, 300);
         game.setVisible(true);
         game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         pane1 = new JPanel();
         pane2 = new JPanel();
         pane3 = new JPanel();

         add(pane1, BorderLayout.NORTH);
         add(pane2, BorderLayout.CENTER);
         add(pane3, BorderLayout.SOUTH);

         pane1.setBackground(Color.white);
         pane2.setBackground(Color.white);
         pane3.setBackground(Color.white);

         placeButton();
     }
     public void placeButton() {
         for (int i = 1; i < 10; i++) {
             if (i < 4) {
                 pane1.add(button.getButton());
             }
             else if (3 < i && i < 7) {
                 pane2.add(button.getButton());
             }
             else if (6 < i && i < 10) {
                 pane3.add(button.getButton());
             }
         }
     }
 }

 //Button class

 import javax.swing.JButton;
 import java.awt.event.ActionListener;
 public class Button {
     private JButton button;
     private int number = 0;
     private String player;
     public Button() {
         button = new JButton();
     }
     public String getPlayer() {
         return player;
     }
     public JButton getButton() {
         return button;
     }
     public void changePlayer() {
         for (int i = 1; i < 10; i++) {
              if (number % 2 == 0) {
                  player = "X";
              }
              else {
                  player = "O";
              }
              number++;
         }
     }
 }

当我在 main 中运行程序时,我收到了框架,但是,没有放置应该代表正方形的按钮。帮忙?

【问题讨论】:

  • 在添加按钮后添加窗格,并在所有内容创建并添加到框架后显示板,也尝试重新绘制框架
  • 您只是将 one JButton 添加到整个网格中,因为您对 getButton() 的调用会返回一个按钮。您需要为每个需要它的位置创建一个新的 JButton,而您并没有这样做。
  • @HovercraftFullOfEels “你只在整个网格中添加了一个 JButton” 关闭 hombre,但没有 sombrero。 Button button = new Button(); OP:应该是 JButton button = new JButton();(但使用 9 个按钮,9 个方格中的每个方格一个)。 编辑: 天啊!没有意识到 OP 有一个扩展 JButton 的类 Button。 :P OP:另一个不使用现有类的名称作为自定义类的好理由。

标签: java swing user-interface


【解决方案1】:

为什么要在已经扩展了 JFrame 的类中包装 JFrame(游戏)?

我会这样做:

public TicTacToeFrame() {
    super("Tic Tac Toe");
    //I prefer to call pack() method in this case..
    //setSize(300, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    pane1 = new JPanel();
    pane2 = new JPanel();
    pane3 = new JPanel();

    add(pane1, BorderLayout.NORTH);
    add(pane2, BorderLayout.CENTER);
    add(pane3, BorderLayout.SOUTH);

    pane1.setBackground(Color.white);
    pane2.setBackground(Color.white);
    pane3.setBackground(Color.white);

    placeButton();
    //call setVisible after you added all the buttons
    setVisible(true);
    pack();
}

placeButton 方法也有一个错误(正如 Hovercraft Full Of Eels 所注意到的那样):

public void placeButton() {
    for (int i = 1; i < 10; i++) {
        //You should create the button all the time
        Button button = new Button();
        if (i < 4) {
            pane1.add(button.getButton());
        }
        else if (3 < i && i < 7) {
            pane2.add(button.getButton());
        }
        else if (6 < i && i < 10) {
            pane3.add(button.getButton());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多