2013-05-13 56 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()不会按预期返回值。