我目前正致力于在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++;
}
}
}
当我在主程序中运行程序时,我会收到框架,但是,不会放置应该代表正方形的按钮。帮助
答案 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());
}
}
}