[英]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為全屏顯示,但我可以使用一種解決方案,當我使用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.