2016-12-13 34 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 我剛開始在Java編碼,我遇到了一個問題與JLabel的網格佈局。正如你在上面的代碼中看到的,我試圖用文本和圖片製作12X2矩陣,但程序只加載最終條目的圖片,我不知道爲什麼。我嘗試了幾個選項,例如GridBagLayout,但沒有任何成功。先謝謝您的幫助。JavaSwing網格佈局將不添加的JLabel

+0

您無法多次將組件添加到容器。您需要實際製作一個看起來像它的新組件,並添加這些組件。 – Ordous

回答

1

A 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樣式代碼中通常可以)。見Java Code Conventions