0

私はゲームを仕上げる過程にあり、非常にイライラするポイントに達しました。それはおそらく単純な修正であり、私が見落としているものなので、皆さんが私を助けてくれるかもしれません. ゲームの5つのハイスコアとともに、一連の5つのJLabelsを画面に表示しようとしています。ただし、背景とラベルなしで表示され続けます。以下は私のコードです:

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の配列を作成する必要はありません。これは、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 に答える