2013-04-13 2 views
0

J'essaie d'utiliser une disposition de grille pour faire une fenêtre graphique. J'ajoute tous mes composants et il compile mais quand il fonctionne il ne montre rien. J'essaye de faire une mise en page simple groupée et empilée comme ceci.Ma fenêtre de l'interface graphique ne montre rien

{introduction message} 
{time label 
time input text} 
{gravity label 
gravity input text} 
{answer label 
answer text box} 
{calculate button clear button} 

Voici mon code

import javax.swing.*; 
import java.awt.*; 

public class TurnerRandyFallingGUI extends JFrame 
{ 
final int WINDOW_HEIGHT=500; 
final int WINDOW_WIDTH=500; 

public TurnerRandyFallingGUI() 
{ 
    setTitle("Falling Distance Calculator"); 

    setSize(WINDOW_WIDTH,WINDOW_HEIGHT); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setLayout(new GridLayout(1, 5)); 

    //labels 
    JLabel introMessage = new JLabel("Welcome to the Falling distance"+ 
             "calculator"); 
    JLabel timeLabel = new JLabel("Please enter the amount of time "+ 
       "in seconds the object was falling."); 
    JLabel gravityLabel = new JLabel("Enter the amount of gravity being "+ 
        "forced onto the object"); 
    JLabel answerLabel = new JLabel("Answer"); 

    //text fields 
    JTextField fTime = new JTextField(10); 
    JTextField gForce = new JTextField(10); 
    JTextField answerT = new JTextField(10); 

    //buttons 
    JButton calculate = new JButton("Calculate"); 
    JButton clr = new JButton("clear"); 

    //panels 
    JPanel introP = new JPanel(); 
    JPanel timeP = new JPanel(); 
    JPanel gravityP = new JPanel(); 
    JPanel answerP = new JPanel(); 
    JPanel buttonsP = new JPanel(); 

    //adding to the panels 
    //intro panel 
    introP.add(introMessage); 
    //time panel 
    timeP.add(timeLabel); 
    timeP.add(fTime); 
    //gravity panel 
    gravityP.add(gravityLabel); 
    gravityP.add(gForce); 
    //answer panel 
    answerP.add(answerLabel); 
    answerP.add(answerT); 
    //button panel 
    buttonsP.add(calculate); 
    buttonsP.add(clr); 




    setVisible(true); 
} 
    public static void main(String[] args) 
    { 
     new TurnerRandyFallingGUI(); 
    } 
} 

Répondre

2

que vous avez ajouté rien à la JFrame que votre classe étend au-dessus. Vous devez ajouter vos composants aux conteneurs dont la hiérarchie mène éventuellement à la fenêtre de niveau supérieur, au this si vous voulez. En d'autres termes, vous n'avez aucun add(someComponent) ou l'appel de méthode this.add(someComponent) fonctionnellement similaire dans votre code ci-dessus.

  • Pensez à ajouter tous vos JPanels à un JPanel unique
  • ajoutant que JPanel Envisager à l'instance JFrame qui est votre classe en appelant add(thatJPanel).
  • Encore mieux serait de ne pas étendre JFrame et juste d'en créer un si nécessaire, mais cela fera probablement l'objet d'une autre discussion à un autre moment.
2

Avant déclaration setVisible (true) ajouter les déclarations suivantes:

add (introP); 
add (timeP); 
add (gravityP); 
add (answerP); 
add (buttonsP); 
+0

Cela ne fonctionnera pas car il ne prend pas en compte le BorderLayout par défaut de JFrame. –

+0

Je pense que tous les panneaux seront ajoutés à JFrame selon GridLayout, une ligne cinq colonnes – olyanren

+0

Non lorsque vous regardez le code ci-dessus, vous pouvez voir setLayout (new GridLayout (1, 5)) instruction est utilisée. Si vous ne spécifiez pas la disposition, la mise en page par défaut du JFrame est BorderLayout – olyanren

2

Il n'y a rien dans votre JFrame. C'est la raison

import javax.swing.*; 
import java.awt.*; 

public class TurnerRandyFallingGUI extends JFrame 
{ 
final int WINDOW_HEIGHT=500; 
final int WINDOW_WIDTH=500; 

public TurnerRandyFallingGUI() 
{ 


    //labels 
    JLabel introMessage = new JLabel("Welcome to the Falling distance"+ 
             "calculator"); 
    JLabel timeLabel = new JLabel("Please enter the amount of time "+ 
       "in seconds the object was falling."); 
    JLabel gravityLabel = new JLabel("Enter the amount of gravity being "+ 
        "forced onto the object"); 
    JLabel answerLabel = new JLabel("Answer"); 

    //text fields 
    JTextField fTime = new JTextField(10); 
    JTextField gForce = new JTextField(10); 
    JTextField answerT = new JTextField(10); 

    //buttons 
    JButton calculate = new JButton("Calculate"); 
    JButton clr = new JButton("clear"); 

    //panels 
    JPanel introP = new JPanel(); 
    JPanel timeP = new JPanel(); 
    JPanel gravityP = new JPanel(); 
    JPanel answerP = new JPanel(); 
    JPanel buttonsP = new JPanel(); 

    //adding to the panels 
    //intro panel 
    introP.add(introMessage); 
    //time panel 
    timeP.add(timeLabel); 
    timeP.add(fTime); 
    //gravity panel 
    gravityP.add(gravityLabel); 
    gravityP.add(gForce); 
    //answer panel 
    answerP.add(answerLabel); 
    answerP.add(answerT); 
    //button panel 
    buttonsP.add(calculate); 
    buttonsP.add(clr); 

    setLayout(new GridLayout(5, 1)); 

    this.add(introP); 
    this.add(timeP); 
    this.add(gravityP); 
    this.add(answerP); 
    this.add(buttonsP); 


setTitle("Falling Distance Calculator"); 

    this.pack(); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 



    setVisible(true); 
    this.validate(); 
} 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TurnerRandyFallingGUI(); 
      } 
     }); 

    } 
} 

Considérez ce qui suit

  • En GridLayout, le premier paramètre est lignes, la deuxième est colonnes
  • Ne placez jamais la taille de JFrame manuellement. Utilisez la méthode pack() pour décider la taille
  • Utilisez SwingUtilities.InvokeLater() pour exécuter l'interface graphique dans un autre fil de discussion.