2017-07-21 73 views
0

我知道這已被問了好幾次,但沒有任何解決方案爲我們工作。 我們正在重新創建具有世界地圖的遊戲,並且應該在每個國家/地區顯示標誌。我們通過使用圖形方法得到它的工作(有點),但這不是持久的,也不能用var名稱來標記一個標誌。Java/Swing層標籤頂部如果彼此

這就是爲什麼我們想要在JLabel中的每一個標誌,並在gamePane內繪製它們,但在他們的指定座標。所以我們需要能夠用z軸進行定位。

GamePane有一個JLabelImageIcon裏面,應該形成背景。最重要的是我們要創建的標誌

一些代碼(可能沒有幫助): -

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(); 
    } 
} 

回答

0

我們再造一個遊戲,其中有一張世界地圖,並應該顯示標誌在每個國家。

您可以輕鬆地將JLabel添加到任何其他組件,包括Jlabel。

的基本代碼是:

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

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

我們通過VAR名稱想不出ADRESS的標誌。當您要訪問您只需使用Hashmapget(...)方法的標誌

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

然後:

你可以保持一個HashMap的所有標誌。