簡體   English   中英

GridLayout在JFrame / JPanel中擠在一起

[英]GridLayout Squished Together in JFrame/JPanel

我正在嘗試創建一個TicTacToe游戲。 用戶只能玩一個棋盤,當用戶單擊某個單元格時,該單元格將填充X / O,而同一單元格(位於第二個棋盤的隨機位置)將填充一個X / O。 用戶可以在任一局中獲勝。 嘗試構建這些板並使它們顯示在各自的JPanel中時,就會出現問題。 理想情況下,我希望JFrame為全屏顯示,所以我設置了setSize(2000,2000)。 當我運行程序時,盡管彈出了JFrame並將兩個TicTacToe網格壓縮在一起。 應當進行游戲狀態更新的底部(X的回合,X贏得了游戲等)似乎也被壓扁了:

壓縮的網格截圖

因此,我決定嘗試使用pack()而不是setSize()。 好消息是游戲板沒有出現變形,但JFrame卻異常小:

JFrame小包截圖(JFrame在左上角)

理想情況下,這就是我希望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中的網格,或者如何使pack()更大?

您需要實現Cell組件的getPreferredSize()方法以返回單元格的大小。 然后,當您打包框架時,單元將以其首選大小顯示。

理想情況下,希望JFrame為全屏顯示,所以我設置了setSize(2000,2000)。

(2000,2000)的大小沒有意義。 我不知道任何方形的屏幕。 無論如何,請勿為此使用setSize()。 相反,當您想要全屏框架時,可以使用:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM