2012-11-27 52 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