2012-11-27 51 views
0

我正在完成一个游戏的过程中,我已经达到了让我非常沮丧的一点。这可能是一个简单的解决方法,我可以忽略,所以也许你们可以帮助我。我试图让一系列5个JLabel在游戏中以5个高分显示在屏幕上。但是,它一直显示着背景,没有标签。以下是我的代码:JLabel没有显示

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

为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 –

回答

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

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

顺便说一句,你有没有特别的理由不使用布局管理器,或者你只是没有意识到它?

+0

我已经在游戏中的所有其他面板上使用过它,但是我只是觉得这次没有必要。我记得我没有使用布局的一个面板,我必须设置大小和位置,否则它不会显示。让我试试这个。 – Requiem

+0

我试图做一个borderlayout而不是像他们说的那样使用上面的循环,但它仍然不起作用。勒叹。 – Requiem

+0

*“试图做一个borderlayout”*先尝试一个'FlowLayout'或'GridLayout'。 –

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

这应该工作。

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

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

+0

这正是我的想法。我认为这是事业。 +1。 – Juvanis

+0

这没有改变。它仍然不起作用。勒叹。 – Requiem

+1

然后按照AlexR的建议并手动(绝对布局...)或通过布局管理器(例如GridLayout)设置JLabel的位置。 Abu的建议也不错:您应该在创建时设置标签的文本,否则它们的大小可能为0,如果不刷新布局。 – PhiLho