Java 网格布局在JFrame/JPanel中挤压在一起

Java 网格布局在JFrame/JPanel中挤压在一起,java,swing,jframe,jpanel,grid-layout,Java,Swing,Jframe,Jpanel,Grid Layout,我正在尝试创建一个Tictatcoe游戏。用户只能玩一个棋盘,当用户点击一个单元格时,该单元格将填充一个X/O,同一单元格(在第二个棋盘的随机点上)将填充一个X/O。用户可以在任一棋盘上获胜。当试图构建这些板并让它们在各自的JPanel中显示时,问题就出现了。理想情况下,我希望JFrame是全屏的,所以我设置了大小(20002000)。当我运行程序时,JFrame弹出,两个TictaToe网格挤压在一起。应该有游戏状态更新的底部部分(X的回合、X赢得游戏等)也似乎被压扁了: 所以我决定尝试pa

我正在尝试创建一个Tictatcoe游戏。用户只能玩一个棋盘,当用户点击一个单元格时,该单元格将填充一个X/O,同一单元格(在第二个棋盘的随机点上)将填充一个X/O。用户可以在任一棋盘上获胜。当试图构建这些板并让它们在各自的JPanel中显示时,问题就出现了。理想情况下,我希望JFrame是全屏的,所以我设置了大小(20002000)。当我运行程序时,JFrame弹出,两个TictaToe网格挤压在一起。应该有游戏状态更新的底部部分(X的回合、X赢得游戏等)也似乎被压扁了:

所以我决定尝试pack()而不是setSize()。好消息是,游戏板未经征服就出现了,但JFrame小得惊人:

理想情况下,这就是我希望JFrame看起来的样子:

理想情况下,我希望JFrame是全屏的,但如果我使用pack()而不是setSize(),我会很乐意使用一个使JFrame更大的解决方案

如何在全屏JFrame中取消网格,或者如何使pack()更大

我构建JFrame的方法代码:

public Attempt(){
  JFrame frame = new JFrame("Shadow Tic Tac Toe Game");
  frame.setSize(2000,2000);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JPanel panel1 = new JPanel();
  JPanel panel2 = new JPanel();

  // Adds panel1 which will hold the first TicTacToe game.
  panel1.setLayout(new GridLayout(3,3,0,0));
  for(int d = 0; d < 3; d++){
     for(int c = 0; c < 3; c++){
        panel1.add(cell[d][c] = new Cell());
     }
  }
  // Builds Panel2 which will hold the second TicTacToe game
  panel2.setLayout(new GridLayout(3,3,0,0));
  row = rand.nextInt(3);
  column = rand.nextInt(3);
  for(int n = 0; n < 3; n++){
     panel2.add(cell[row][column] = new Cell());
  }
  // Adds Panel1 to the JFrame
  frame.add(panel1, BorderLayout.EAST);
  // Adds Panel2 to the JFrame
  frame.add(panel2, BorderLayout.WEST);
  // Updates the status of the game here (win/lose/draw/whose turn it is)
  frame.add(jlblStatus, BorderLayout.SOUTH);
  // Calls method Chose() which allows the player to chose which token they will play as
  Chose();
  frame.setVisible(true);
公共尝试(){
JFrame=新JFrame(“影子井字游戏”);
框架设置尺寸(20002000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel1=新的JPanel();
JPanel panel2=新的JPanel();
//添加panel1,它将举行第一场Tictaoe游戏。
面板1.设置布局(新网格布局(3,3,0,0));
对于(int d=0;d<3;d++){
对于(int c=0;c<3;c++){
面板1.添加(单元格[d][c]=新单元格());
}
}
//构建Panel2,它将举办第二场Tictaoe游戏
面板2.设置布局(新网格布局(3,3,0,0));
row=兰特·耐克斯汀(3);
列=rand.nextInt(3);
对于(int n=0;n<3;n++){
panel2.添加(单元格[行][列]=新单元格());
}
//将Panel1添加到JFrame
框架。添加(面板1,边界布局。东);
//将Panel2添加到JFrame
框架。添加(面板2,边界布局。西部);
//在此更新游戏状态(赢/输/平/轮到谁)
添加框架(jlblStatus,BorderLayout.SOUTH);
//调用方法select(),该方法允许玩家选择他们将使用的令牌
选择();
frame.setVisible(true);
}

如何在全屏JFrame中取消网格,或者如何使pack()更大

您需要实现
Cell
组件的
getPreferredSize()
方法来返回单元格的大小。然后,当您打包框架时,单元格将以其首选大小显示

理想情况下,我希望JFrame是全屏的,所以我设置了大小(20002000)

大小为(20002000)是没有意义的。我不知道有任何方形屏幕。在任何情况下,都不要为此使用setSize()。当您需要全屏画面时,请使用:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);