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