2017-07-21 4 views
0

Je sais que cela a été demandé plusieurs fois, mais aucune des solutions n'a fonctionné pour nous. Nous sommes en train de recréer un jeu qui a une carte du monde, et qui est supposé montrer des drapeaux dans tous les pays. Nous l'avons fait fonctionner (en quelque sorte) en utilisant une méthode graphique, mais ce n'était pas persistant, aussi nous ne pouvions pas adresser un drapeau par un nom de var.Etiquettes de calques Java/Swing les unes sur les autres

C'est pourquoi nous voulons avoir tous les drapeaux dans un JLabel, et les dessiner à l'intérieur du gamePane, mais sur leurs coordonnées spécifiées. Nous devons donc être en mesure de positionner avec un axe z.

Le GamePane a un JLabel avec un ImageIcon à l'intérieur, qui devrait former l'arrière-plan. En plus de cela, nous voulons créer les drapeaux

un code (peut-être pas utile): -

gamePane = new JPanel(); 
    [...] 

    public void paintFlagLabel() { 
    for (Country currentCountry : risiko.getCountryList()) { 
     JLabel flag = new JLabel(); 
     int x = currentCountry.getX(); 
     int y = currentCountry.getY(); 

     if (currentCountry.getOwningPlayer().equals(this.player)) { 
      flag.setIcon(new ImageIcon(greenFlag)); 
     } else { 
      flag.setIcon(new ImageIcon(redFlag)); 
     } 
     String coordinates = "pos " + x + " " + y; 
     gamePane.add(flag, coordinates); 
     gamePane.revalidate(); 
     gamePane.repaint(); 
    } 
} 

Répondre

0

Nous recréons un jeu qui a une carte du monde, et est censé montrer des drapeaux dans tous les pays.

Vous pouvez facilement ajouter un JLabel à n'importe quel autre composant, y compris un Jlabel.

Le code de base est:

JLabel background = new JLabel(new ImageIcon(...)); 
background.setLayout(null); 

JLabel flag = new JLabel(new ImageIcon(...)); 
flag.setSize(flag.getPrefferedSize()); 
flag.setLocation(....); 
background.add(flag); 

nous ne pouvions pas adresse un drapeau par un nom var.

Vous pouvez garder un hashmap de tous les drapeaux:

Hashmap<String, JLabel> flags = new Hashmap<String, JLabel>() 
flags.add("theCountryName", theFlag); 

Ensuite, lorsque vous voulez accéder au drapeau que vous utilisez simplement la méthode get(...) du Hashmap.