Java JLabel.getLocation()始终返回0

时间:2013-05-13 18:01:07

标签: location jlabel

我正在学习Java,所以我很新。 我正在使用GUI布局,图像,标签等创建一个简单的“迷宫”类型游戏。

要创建我的迷宫布局,我使用了一个字符串数组;

    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数组并在其中放置带有图像图标的标签,具体取决于字符串为“W”表示墙,“S”表示空格。标签也是一个阵列,我在这背后的想法是限制玩家的移动,使他们不能穿过墙壁。

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]

我想知道如何获取每个墙贴标签的位置,以便我可以根据我的播放器动作进行检查。

这甚至是做这样事情的有效方法吗? 有人可以教我一种更有效的方法吗?

抱歉我的原始片段或编程错误

谢谢你Niall。

1 个答案:

答案 0 :(得分:0)

public Point getLocation()

由于本机事件处理的异步性质,此方法可以返回过时的值(例如,在快速连续几次调用setLocation()之后)。因此,建议的获取组件位置的方法在java.awt.event.ComponentListener.componentMoved()之内,在操作系统完成组件移动后调用该方法。

布局可能未在内部使用setLocation()。因此getLocation()不会按预期返回值。