0

我正在完成一场比赛,我已经达到了让我非常沮丧的地步。这可能是一个简单的修复,我忽略了一些东西,所以也许你们可以帮助我。我试图让一系列 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

4 回答 4

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

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

于 2012-11-27T16:42:58.530 回答
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]);
    }

这应该有效。

于 2012-11-27T16:42:34.657 回答
2

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

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

于 2012-11-27T16:41:49.950 回答
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++;
   }
于 2012-11-27T16:39:35.093 回答