2016-12-07 3 views
1

Création d'un jeu Tic Tac Toe. Pour le moment, les boutons n'ont pas de but, et le jeu ne devrait pas fonctionner du tout. Tout ce que j'essaie de faire est de configurer l'interface graphique du jeu, qui apparaît parfois, mais la plupart du temps ne se présente jamais. Je suis assez nouveau à l'interface graphique pour Java, donc toute information serait utile!GUI ne s'affiche pas, Java (BlueJ)

**** EDIT: Compris! Je devais faire frame.setVisible(true) après avoir créé tous les boutons, a semblé le réparer.

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) 
     { 

     } 
    } 
} 

Répondre

0

Généralement bat vous créez un JFrame puis un JPanel ou plus si nécessaire. En outre, vous pouvez configurer LayoutManager pour chaque panneau.

Vous n'avez certainement pas besoin de configurer buttons[i][j].setVisible(true); ou quoi que ce soit de façon similaire. Vous venez de définirVisible (vrai) sur un panneau ou un cadre et il va automatiquement définir tout pour chaque composant qui est attaché à ce panneau/cadre.

Aussi se débarrasser de frame.setLocationRelativeTo(null); pour l'instant.

Une autre bonne pratique: commencez par configurer tout ce dont vous avez besoin pour un composant avant de l'ajouter à un panneau ou à un cadre. En dehors de ça, je n'ai aucune idée de pourquoi ça se montrerait parfois et d'autres fois non. Je ne sais pas pourquoi.

+0

Merci pour l'info! J'ai changé toutes les choses que vous m'aviez dites, même si je n'ai toujours pas compris pourquoi mes boutons n'apparaissent pas (peut-être le panneau entier?). Des pensées? –

+0

Je vois que vous l'avez compris. Ouais, je n'ai pas remarqué que ton cadre était visible. Généralement, vous définissez la visibilité comme la dernière chose après avoir tout configuré. Bien pour vous. Au lieu d'éditer le message, insérez une nouvelle réponse. Peut-être que cela aidera les autres. – Aaroneiros