JLabel没有表现出来

时间:2012-11-27 16:33:46

标签: java swing jpanel jlabel paintcomponent

我正在完成一场比赛,我已达到让我非常沮丧的地步。这可能是一个简单的修复和我忽略的东西,所以也许你们可以帮助我。我正试图让一系列5个JLabel出现在屏幕上,并获得游戏中的5个高分。但是,它一直显示背景而没有标签。以下是我的代码:

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);
    }
}

4 个答案:

答案 0 :(得分:4)

阵列的初始化非常可疑。 而不是:

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

尝试:

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

未经测试,因为您的代码无法编译。

[编辑] 实际上,您不需要创建一个JLabel数组,因为您将它们抛出(数组在方法结束时超出范围)。您可以动态创建标签:

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

您仍需要使用布局管理器或绝对位置设置这些标签的位置。

答案 1 :(得分:3)

而不是使用for each循环尝试使用常规for循环,如下所示:

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

这应该有用。

答案 2 :(得分:2)

由于您不使用布局管理器,因此您自己设置了标签位置和大小。否则,我猜你的所有标签都有size = 0,位于0,0点。

顺便说一句,您是否有特殊原因不使用布局管理器或您只是不知道它?

答案 3 :(得分:0)

尝试在高分循环中移动Jlabel初始化代码:

   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++;
   }