2012-11-27 5 views
0

Je suis en train de terminer un jeu et j'ai atteint un point qui m'a rendu extrêmement frustré. C'est probablement une solution simple et quelque chose que je néglige, alors peut-être que vous pouvez m'aider. J'essaie de faire apparaître une série de 5 JLabels à l'écran avec les 5 meilleurs scores du jeu. Cependant, il continue à apparaître avec le fond et pas d'étiquettes. Voici mon code:JLabel ne montre pas

import java.awt.Graphics; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class EndPanel extends JPanel{ 

    GameGUI gui; 
    JLabel[] array; 

    public EndPanel(GameGUI gui) { 
     super(); 
     this.gui = gui; 
     array = new JLabel[5]; 
     for(JLabel i : array) { 
      i = new JLabel(""); 
      i.setVisible(true); 
      this.add(i); 
     } 
     int i = 0; 
     for(HighScore h: gui.getGameDriver().getHighScores()) { 
      System.out.println(gui.getGameDriver().getHighScores()); 
      array[i].setText(h.toString()); 
      i++; 
     } 

    } 

    public void paint(Graphics g) { 
     super.paint(g); 
     g.drawImage(gui.images.get(32), 0, 0, this); 
     g.drawImage(gui.images.get(31), 112, 100, this); 
    } 
} 
+0

Pour une meilleure aide plus tôt, postez un [SSCCE] (http://sscce.org/). –

Répondre

0

essayer de déplacer le code d'initialisation Jlabel dans la boucle de score élevé:

int i = 0; 
    for(HighScore h: gui.getGameDriver().getHighScores()) { 
     System.out.println(gui.getGameDriver().getHighScores()); 
     array[i] = new JLabel(h.toString()); 
     this.add(array[i]); 
     i++; 
    } 
2

Puisque vous n'utilisez le gestionnaire de mise en page que vous avez défini la position de l'étiquette et la taille vous-même. Sinon, je suppose que toutes vos étiquettes ont une taille = 0 et sont positionnées au point 0,0.

BTW, avez-vous une raison particulière de ne pas utiliser le gestionnaire de mise en page ou vous ne savez pas à ce sujet?

+0

Je l'ai utilisé sur tous mes autres panneaux dans le jeu mais je ne me sentais pas comme si c'était nécessaire cette fois. Je me souviens d'un panneau que je n'ai pas utilisé une mise en page et j'ai dû définir la taille et la position, sinon, il ne s'affiche pas. Laisse-moi essayer ça. – Requiem

+0

J'ai essayé de faire une bordure à la place et d'utiliser la boucle ci-dessus comme ils le disaient mais ça ne marche toujours pas. Le soupir. – Requiem

+0

* "a essayé de faire une bordure" * Essayez d'abord un 'FlowLayout' ou' GridLayout'. –

3

Au lieu d'utiliser la boucle essayer for each en utilisant la boucle régulière for, comme ceci:

JLabel [] label = new JLabel[5]; 
    for(int i = 0; i<5;i++){ 
     label[i] = new JLabel("Label number: " +i); 
     panel.add(label[i]); 
    } 

Cela devrait fonctionner.

4

L'initialisation du tableau est fortement suspecte. Au lieu de:

for(JLabel i : array) { 
     i = new JLabel(""); 
     i.setVisible(true); 
     this.add(i); 
    } 

essayer:

for (int i = 0; i < array.length; i++) { 
     array[i] = new JLabel(""); 
     array[i].setVisible(true); 
     add(array[i]); 
    } 

Untested que votre code ne peut être calculée. En fait, vous n'avez pas besoin de créer un tableau de JLabel depuis que vous les avez expulsés (le tableau est hors de portée à la fin de la méthode). Vous pouvez créer les étiquettes à la volée:

for (HighScore h : gui.getGameDriver().getHighScores()) { 
     System.out.println(gui.getGameDriver().getHighScores()); 
     JLabel label = new JLabel(h.toString()); 
     add(label); 
    } 

Vous devez toujours définir la position de ces étiquettes, avec un gestionnaire de mise en page ou en position absolue.

+0

c'est exactement ce que je pensais. et je pense que c'est la cause. +1 – Juvanis

+0

Cela n'a rien changé. Ça ne marche toujours pas. Le soupir. – Requiem

+1

Puis suivez les conseils d'AlexR et définissez la position de vos JLabels, soit manuellement (mise en page absolue ...) ou via un gestionnaire de mise en page (GridLayout par exemple). Le conseil d'Abu est bon aussi: vous devez définir le texte de l'étiquette au moment de la création, sinon ils pourraient avoir une taille de 0, si vous ne rafraîchissez pas la mise en page. – PhiLho