2017-05-09 2 views
1

Je crée une application swing (rip je sais), et je veux placer deux JLabels l'un sur l'autre. Heres the scenarioAjouter des JLabels superposés

Le jeu est une vue d'oiseau d'une île, avec l'île séparée en carrés de la grille ... Maintenant, sur chacun de ces carrés de la grille, il peut y avoir plusieurs objets et 1 animal. Ive a créé deux JLabels

JLabel animal = new JLabel(); 
JLabel item = new JLabel(); 

puis utilisé animal.setIcon(...); pour définir leur image. Maintenant, cela fonctionne parfaitement, mais je veux placer une image sur l'étiquette de l'animal, de sorte que je peux avoir deux visibles sur le même carré de la grille.

Je vous écris le code suivant dans une classe étend JPanel, que j'ajouter plus tard à un JFrame (Ceci est la classe locator)

if(inputItem!= null){ 
      try{ 
       imgItem = ImageIO.read(inputItem); 
       itemLabel.setIcon(new ImageIcon(imgItem.getScaledInstance(this.getWidth(), this.getHeight(), Image.SCALE_SMOOTH))); 
       this.add(itemLabel); 
      }catch(Exception e){ 
       //do something 
      } 
     } 

donc ceci fonctionne très bien. Et je fais quelque chose de très similaire pour les variables inputAnimal et imgAnimal aussi. Je me demande simplement comment je peux les ajouter en les ajoutant l'un à l'autre. J'ai essayé simplement de les ajouter séquentiellement mais cela ne fonctionne pas.

Merci à l'avance

+1

Vous n'avez pas besoin de deux étiquettes . Vous avez besoin d'un [OverlayIcon] (http://stackoverflow.com/questions/17088599/how-to-combine-two-icons-in-java) –

Répondre

2

maintenant sur chacune de ces cases de la grille, il peut y avoir beaucoup 1 point et 1 animal. J'ai créé deux JLabels

Vous pouvez utiliser le OverlayLayout. Il vous permet d'empiler des composants dans l'axe Z sur le même panneau.

Ou vous pouvez simplement profiter de la relation parent Swing/enfant entre les composants et ajouter une étiquette à une autre étiquette tant que l'étiquette mère utilise un gestionnaire de mise en page:

animal.setLayout(new BorderLayout()); 
animal.add(item); 
gridSquare.add(animal); 
+0

A travaillé super, merci –