Java Tic Tac Toe GUI

Java Tic Tac Toe GUI,java,swing,tic-tac-toe,Java,Swing,Tic Tac Toe,代码运行良好,但问题是我需要3列和3行。。但输出显示6列,而不是三行三列 下面是出现问题的代码。。 这是一个主要的类: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import games.board.Board; import games.board.Cell; import games.board.Mark; import javax.swing.JFrame; import javax

代码运行良好,但问题是我需要3列和3行。。但输出显示6列,而不是三行三列

下面是出现问题的代码。。 这是一个主要的类:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import games.board.Board;
import games.board.Cell;
import games.board.Mark;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;



public class TicTacToeGUIGame extends JFrame  {

/**
 * @param args
 */
private Board gb;
private int turn;
private void takeTurn(Cell c) {
    Mark curMark = (turn++ % 2 == 0)? Mark.NOUGHT
    : Mark.CROSS;
    gb.setCell(curMark, c.getRow(), c.getColumn());
    }
private TicTacToeGUIGame() {
    gb = new Board(3, 3, new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
    Cell c = (Cell) ae.getSource();
    takeTurn(c);
    }
    });
    this.add(gb);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("TIC-TAC-TOE");
    this.setSize(300, 300);
    this.setVisible(true);
    }


public static void main(String[] args) {
    // TODO Auto-generated method stub
    SwingUtilities.invokeLater( new Runnable () {
        public void run() { new TicTacToeGUIGame(); }
        });

}

}
下面是一个board类:

package games.board;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Board extends JPanel {
private Cell[][] cells;
public Board(int rows, int columns) {
cells = new Cell[rows][columns];
for( int r = 0; r < cells[0].length; r++ ) {
for (int c = 0; c < cells[1].length; c++) {
cells[r][c] = new Cell(r,c);
}
}
}
public Board(int rows, int columns, ActionListener ah) {
    cells = new Cell[rows][columns];
    this.setLayout(new GridLayout());
    for( int r = 0; r < cells.length; r++ ) {
    for (int c = 0; c < cells[r].length; c++) {
    cells[r][c] = new Cell(r,c);
    this.add(cells[r][c]);
    cells[r][c].addActionListener(ah);
    }
    }
    }
public void setCell(Mark mark, int row, int column) throws
IllegalArgumentException {
if (cells[row][column].getContent() == Mark.EMPTY)
cells[row][column].setContent(mark);
else throw new IllegalArgumentException("Player already there!");
}
public Cell getCell(int row, int column) {
return cells[row][column];
}
public String toString() {
StringBuilder str = new StringBuilder();
for( int r = 0; r < cells.length; r++ ) {
str.append("|"); 


for (int c = 0; c < cells[r].length; c++) {
switch(cells[r][c].getContent()) {
case NOUGHT:
    str.append("O");
    break;
    case CROSS:
    str.append("X");
    break;
    case YELLOW:
    str.append("Y");
    break;
    case RED:
    str.append("R");
    break;
    case BLUE:
    str.append("B");
    break;
    case GREEN:
    str.append("G");
    break;
    case MAGENTA:
    str.append("M");
    break;
    case ORANGE:
    str.append("M");
    break;
    default: //Empty
    str.append("");
    }
    str.append("|");
    }
    str.append("\n");
    }
    return str.toString();

}

}

董事会级别的变化:

for( int r = 0; r < cells[0].length; r++ ) {
    for (int c = 0; c < cells[1].length; c++) {
      cells[r][c] = new Cell(r,c);
   }
 }

我想要三列三行。。但输出显示6列

您需要为GridLayout指定适当的参数:

this.setLayout(new GridLayout(0, 3));
这将告诉网格包含3列。行数将取决于您添加的组件数

我想要三列三行。。。但输出显示6列

使用,this.setLayoutnew GridLayoutRows,nColumns


根据需要的列数和行数更改nRows和nColumns,即,如果您想要使用20x20游戏,请选择此项。setLayoutnew GridLayout20,20

这是很多代码。如果您编辑代码并只包含与问题相关的部分,您将更快地获得帮助。例如,三个枚举都不相关。Andrew Thank..我编辑了..@user2694776接受我的方法,几秒钟后又取消接受;哈哈。拜托,伙计,他们有90k的代表,他不需要。换行符和空格将有助于使代码更加清晰。这将有助于与原作进行比较,并且使其更易于阅读。@RyanAmos我曾经为了好玩,在一行上写了一个完整的程序。公共类示例{public static void mainString args[]{System.out.printlnhahahaha;}}}-非常难阅读。感谢您的修复@DummyCode这大部分是样板代码,所以很容易阅读。嵌套for循环的样板文件越来越少,因此在没有空格的情况下更难阅读。
this.setLayout(new GridLayout(0, 3));