2016-12-13 5 views
0
JLabel imagine_hearth = new JLabel(new ImageIcon(new ImgUtils().scaleImage(35,35,"health.png"))); 
    JLabel imagine_bullet = new JLabel(new ImageIcon(new ImgUtils().scaleImage(35,35,"bullet.jpg"))); 
    JLabel player_icon = new JLabel(); 
    Board2 b2 = new Board2(); 
    JPanel stats = new JPanel(); 
    stats.setSize(100,450); 
    stats.setLayout(new GridLayout(12,2)); 
    for(i=1; i<5 ; i++) 
    { 
     stats.add(new JLabel("Player " + i)); 
     player_icon.setIcon(new ImageIcon(new ImgUtils().scaleImage(35,35,pioni[i-1]))); 
     stats.add(player_icon,BorderLayout.CENTER); 
     stats.add(new JLabel("X" + pl[i-1].nr_lives)); 
     stats.add(imagine_hearth,BorderLayout.CENTER); 
     stats.add(new JLabel("X" + pl[i-1].nr_bullets)); 
     stats.add(imagine_bullet,BorderLayout.CENTER); 
    } 

this is how it looks を追加しません。上記のコードで見ることができるように、私はテキストと写真で行列12X2を作成しようとしましたが、プログラムは最後の入力のために画像をロードするだけです。理由は分かりません。私は任意の成功なしでGridBagLayoutのようないくつかのオプションを試してみました。助けを前にありがとう。JavaSwing GridLayoutには、私はちょうどJavaでコーディングを開始し、私はJLabelのグリッドレイアウトの問題を検出したJLabelの

+0

コンテナにコンポーネントを複数回追加することはできません。あなたは実際にそれのように見えるそれらを追加する新しいコンポーネントを作る必要があります。 – Ordous

答えて

1

JLabelは親が1つしかなく、1つの場所にしか存在しません。したがって、もう一度追加すると、は元の場所から自体を削除し、新しい場所に追加します。これはレイアウトに関係なく、すべてのSwingコンポーネント間で一定の動作です。これを修正するには、いくつかの番号をJLabelにする必要があります。ただし、ImageIconを共有することはできます。

ImageIcon imagine_hearth = new ImageIcon(new ImgUtils().scaleImage(35,35,"health.png")); 
ImageIcon imagine_bullet = new ImageIcon(new ImgUtils().scaleImage(35,35,"bullet.jpg")); 

<other code you had, *without player_icon*> 
for(i=1; i<5 ; i++) { 
    <loop code> 
    JLabel player_icon = new JLabel(new ImageIcon(new ImgUtils().scaleImage(35,35,pioni[i-1]))); 
    stats.add(player_icon); 
    <...> 
    stats.add(new JLabel(imagine_hearth)); 
    <...> 
    stats.add(new JLabel(imagine_bullet)); 
} 

P.S.アンダースコアは通常、純粋なJavaコードでは推奨されません(低レベルネットワーキングのようなCスタイルのコードではしばしばOKです)。 Java Code Conventionsを参照してください。

関連する問題