2017-12-10 10 views
0

Ich versuche, ein TicTacToe Spiel 'zu erstellen. Nur eine Karte ist vom Benutzer spielbar, und wenn der Benutzer auf eine Zelle klickt, wird die Zelle mit einem X/O gefüllt, und dieselbe Zelle (auf einer zufälligen Stelle der zweiten Karte) wird mit einem X/O gefüllt. Der Benutzer kann auf beiden Brettern gewinnen. Das Problem tritt auf, wenn man versucht, die Boards zu bauen und sie in ihren jeweiligen JPanels anzeigen zu lassen. Ich möchte idealerweise, dass der JFrame Vollbildmodus ist, also setze ich Size (2000,2000). Wenn ich das Programm starte, erscheint der JFrame und beide TicTacToe-Gitter werden zusammengequetscht. Der untere Teil, wo es angeblich Status-Updates des Spiels (X an der Reihe, X gewann das Spiel, usw.) zu sein scheint auch zerquetscht werden:GridLayout Squished zusammen in JFrame/JPanel

Squished grids screenshot

So entschied ich mich Pack zu versuchen() anstelle von setSize(). Eine gute Nachricht ist, dass die Spielbretter auftauchten unsquished aber die JFrame war wahnsinnig klein:

Small JFrame pack screenshot(JFrame is top left corner)

Im Idealfall ist das, was ich die JFrame aussehen soll:

Ideal JFrame

Im Idealfall möchte ich der JFrame soll Vollbild sein, aber mir würde es gut gehen mit einer Lösung, die den JFrame größer macht, wenn ich pack() anstelle von setSize() benutze.

Wie entmarke ich entweder die Raster im Vollbild JFrame oder wie mache ich pack() größer?

Code of Verfahren, in dem ich das bauen 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); 

}

Antwort

1

Wie ich entweder unsquish die Gitter in vollem Umfang nutzen JFrame oder wie mache ich pack() größer?

Sie benötigen die getPreferredSize() Methode Ihrer Cell Komponente zu implementieren, um die Größe der Zelle zurückzukehren. Wenn Sie dann den Rahmen packen, werden die Zellen in ihrer bevorzugten Größe angezeigt.

Idealerweise sollte der JFrame Vollbild sein, also setze ich Size (2000,2000).

Eine Größe von (2000, 2000) macht keinen Sinn. Ich kenne keine quadratischen Bildschirme. Verwenden Sie in jedem Fall setSize() nicht dafür. Wenn Sie stattdessen einen Vollbildmodus verwenden möchten, verwenden Sie:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);