Tic Tac Toe Java GUI设置游戏区

时间:2016-12-09 00:22:11

标签: java swing user-interface

我目前正致力于在Java GUI中编写简单版本的Tic Tac Toe。我在设置比赛场地时遇到了问题。一个按钮代表一个正方形,玩家可以按下该正方形以获得" 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++;
         }
     }
 }

当我在主程序中运行程序时,我会收到框架,但是,不会放置应该代表正方形的按钮。帮助

1 个答案:

答案 0 :(得分:3)

为什么要在已扩展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());
        }
    }
}