2016-12-07 6 views
1

Erstellen Sie ein Tic Tac Toe-Spiel. Im Moment haben die Knöpfe keinen Zweck und das Spiel sollte überhaupt nicht funktionieren. Alles, was ich versuche, ist die GUI für das Spiel einzurichten, die manchmal angezeigt wird, wenn ich es ausführe, aber die meiste Zeit nie auftaucht. Ich bin ziemlich neu in GUI für Java, so dass jede Information hilfreich wäre!GUI nicht angezeigt, Java (BlueJ)

**** EDIT: Es herausgefunden! Ich musste frame.setVisible(true) tun, nachdem ich alle Tasten erstellt habe, schien es zu beheben.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
import javax.swing.JOptionPane; 

/** 
* A class modelling a tic-tac-toe (noughts and crosses, Xs and Os) game in a very 
* simple GUI window. 
* 
* @author Thomas Bryk 
* @version December 4, 2016 
*/ 

public class TicTacToe extends JFrame 
{ 
    private JFrame frame; 
    private JButton[][] buttons; 
    private JMenuBar menuBar; 
    private JMenuItem menuNew, menuQuit; 
    private JLabel label; 
    private JOptionPane pane; 

    /** 
    * Constructs a new Tic-Tac-Toe board and sets up the basic 
    * JFrame containing a JTextArea in a JScrollPane GUI. 
    */ 
    public TicTacToe() 
    { 
     super(); 
     frame=new JFrame("Tic Tac Toe"); 
     JMenu menu=new JMenu("Game"); 
     label=new JLabel(); 

     menuBar= new JMenuBar(); 
     menuBar.add(menu); 

     menuNew= new JMenuItem("New"); 
     menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK)); 
     menuNew.getAccessibleContext().setAccessibleDescription("Creates a new game of Tic Tac Toe"); 

     menuQuit= new JMenuItem("Quit"); 
     menuQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.CTRL_MASK)); 
     menuQuit.getAccessibleContext().setAccessibleDescription("Quits the game of Tic Tac Toe"); 

     menu.add(menuNew); 
     menu.add(menuQuit); 

     frame.setJMenuBar(menuBar); 
     frame.add(label); 
     frame=new JFrame("Tic Tac Toe"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(350,355); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     buttons=new JButton[3][3]; 
    } 

    private void setUp() 
    { 
     JPanel game = new JPanel(new GridLayout(3,3)); 
     JPanel panel = new JPanel(new BorderLayout()); 
     frame.add(panel); 
     game.setVisible(true); 
     panel.setVisible(true); 
     game.setPreferredSize(new Dimension(300,300)); 
     panel.setPreferredSize(new Dimension(325,425)); 
     panel.add(game, BorderLayout.CENTER); 

     for(int i = 0; i < 3; i++) 
     { 
      for(int j = 0; j < 3; j++) 
      { 
       buttons[i][j] = new JButton(); 
       buttons[i][j].setText(""); 
       buttons[i][j].setVisible(true); 
       game.add(buttons[i][j]); 
       buttons[i][j].addActionListener(new ButtonListener()); 
      } 
     } 
    } 

    public static void main (String[] args){ 
     TicTacToe mainGame=new TicTacToe(); 
     mainGame.setUp(); 
    } 

    private class ButtonListener implements ActionListener 
    {  
     public void actionPerformed(ActionEvent ev) 
     { 

     } 
    } 
} 

Antwort

0

Allgemeinen in Schwung erstellen Sie zunächst ein JFrame dann ein JPanel oder mehr, falls erforderlich. Außerdem können Sie LayoutManager für jedes Panel einrichten.

Sie müssen auf keinen Fall buttons[i][j].setVisible(true); oder etwas ähnliches manuell einrichten. Sie setzen Visible (true) einfach auf einem Panel oder Frame und es wird automatisch alles für jede Komponente festgelegt, die an dieses Panel/Frame angehängt ist.

Auch loswerden frame.setLocationRelativeTo(null); für jetzt.

Auch eine Sache, die eine ziemlich gute Praxis ist - zunächst alles, was Sie für eine Komponente benötigen, vor dem Hinzufügen zu einem Panel oder Frame.

Ansonsten habe ich keine wirkliche Idee, warum es manchmal auftauchen würde und manchmal nicht.

+0

Danke für die Info! Ich habe all die Dinge geändert, die du mir gesagt hast, aber ich habe immer noch nicht herausgefunden, warum meine Knöpfe nicht auftauchen (könnte das ganze Panel sein?). Irgendwelche Gedanken? –

+0

Ich sehe, du hast es herausgefunden. Ja, ich habe nicht bemerkt, dass dein Rahmen sichtbar ist. Im Allgemeinen setzen Sie die Sichtbarkeit als das letzte, nachdem Sie alles eingerichtet haben. Schön für dich. Anstatt den Post zu bearbeiten, fügen Sie eine neue Antwort ein. Vielleicht wird es anderen helfen. – Aaroneiros