2013-05-13 140 views
0

我正在學習Java,所以我很新。 我使用GUI佈局,圖像,標籤等創建了一個簡單的'迷宮'型遊戲..Java JLabel.getLocation()總是返回0

要創建我的迷宮佈局,我使用了一個字符串數組;

mazeLayout[0] = "WWWWWWWWWW"; 
    mazeLayout[1] = "WSSSWWSWWW"; 
    mazeLayout[2] = "WSWSWWSSSW"; 
    mazeLayout[3] = "WSWSWWWWSW"; 
    mazeLayout[4] = "WSWSWWWWSW"; 
    mazeLayout[5] = "WSWSWSSSSW"; 
    mazeLayout[6] = "WSWSWSWWWW"; 
    mazeLayout[7] = "WSWSWSWWWW"; 
    mazeLayout[8] = "WSWSSSWWWW"; 
    mazeLayout[9] = "WWWWWWWWWW"; 

,然後轉換此爲2D陣列和圖像圖標放置在標籤與它取決於串是用於牆壁或「S」用於空間「W」英寸此外,標籤是一個數組,我背後的想法是限制玩家的移動,使他們不能穿過牆壁。

int mw = 0; 
int mf = 0; 
for(int y = 0; y < 10; y++){ 
    for(int x = 0; x < 10; x++){ 
     mazeLayout2d[y][x] = mazeLayout[y].substring(x, x+1); 
     if (mazeLayout2d[y][x].equals("W")){ 
      lblmazewall[mw] = new JLabel(); 
      mazewall = new ImageIcon("mazewall.png"); 
      lblmazewall[mw].setIcon(mazewall); 
      pCenter.add(lblmazewall[mw]); 
      mw++; 
      pCenter.revalidate(); 

     } 
     if (mazeLayout2d[y][x].equals("S")){ 
      lblmazefloor[mf] = new JLabel(); 
      mazefloor = new ImageIcon("mazefloor.png"); 
      lblmazefloor[mf].setIcon(mazefloor); 
      pCenter.add(lblmazefloor[mf]); 
      mf++; 
      pCenter.revalidate(); 
     } 
    } 
} 

我的問題是,當我跑這條線

System.out.println(lblmazewall[x].getLocation()); //x being any number 

我總是得到java.awt.Point中的[X = 0,Y = 0]

我想知道如何獲取每個牆上標籤的位置,以便我可以根據我的玩家動作進行檢查。

這甚至是一個有效的方式來做這樣的事情嗎? 有人可以教我一個更有效的方法嗎?

對不起,我粗段和或不好的編程

三江源尼爾。

回答

0
public Point getLocation() 

由於本地事件處理的異步特性,這種方法可以(在之後快速連續的setLocation()幾個電話例如)返回過時的值。因此,獲取組件位置的推薦方法是在操作系統完成移動組件後調用的java.awt.event.ComponentListener.componentMoved()之內。

內部佈局可能沒有使用setLocation()。因此,getLocation()不會按預期返回值。