2016-12-13 4 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 ich Codierung in Java gerade erst begonnen und ich stieß auf ein Problem mit einem JLabel Raster-Layout. Wie Sie im obigen Code sehen können, habe ich versucht, eine Matrix 12X2 mit Text und Bildern zu erstellen, aber das Programm lädt nur die Bilder für den letzten Eintrag und ich habe keine Ahnung warum. Ich habe verschiedene Optionen wie GridBagLayout ohne Erfolg versucht. Vielen Dank im Voraus für die Hilfe.JavaSwing Gridlayout nicht hinzufügen JLabel

+0

Sie können einem Container keine Komponenten mehrfach hinzufügen. Sie müssen tatsächlich eine neue Komponente erstellen, die so aussieht und diese hinzufügen. – Ordous

Antwort

1

Ein JLabel kann nur 1 Elternteil haben und an 1 Stelle sein. Wenn Sie es also erneut hinzufügen, entfernt es selbst von dem alten Speicherort, fügt dann zu dem neuen hinzu. Dies ist unabhängig vom Layout und dem Verhalten, das bei allen Swing-Komponenten konstant ist. Um dies zu beheben, müssen Sie mehrere JLabel s machen. Sie können jedoch weiterhin die ImageIcon teilen.

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. Unterstreichungen werden normalerweise in reinem Java-Code (obwohl oft in C-Stil-Code wie Low-Level-Netzwerk) OK. Siehe Java Code Conventions.