JButton及其Location方法非常奇怪

时间:2012-06-05 06:28:18

标签: java swing jbutton layout-manager grid-layout

我的问题是,当我创建一个JButton,在它的构造函数中,我使用以下代码将其位置设置为某些相对坐标,比如x = 5,y = 6,使用以下代码:

this.setLocation(new Point(x, y));

但在我尝试使用getLocation()方法获取其位置后,它总是返回0,0。请注意,对于我试图放置在网格布局驱动的JFrame上的每个JButton都会发生这种情况,并且在调试过程中,我还注意到它们的位置正在被正确实例化。

有人可以向我解释为什么会发生这种情况,如果我能以某种方式修复它吗?

编辑:

构造函数(我创建的brick类,扩展了JButton):

public Brick(int posx, int posy) {
        this.setLocation(new Point(posx, posy));
        this.setVisible(true);
    }

我在2 for for循环中制作了大约100多个:

   for (int row = 0; row < 15; row++) {
    for (int column = 0; column < 15; column++) {
    Brick brickie = new Brick(row, column);
    }
   }

但之后,如果我想挑一块砖并检查它的位置:

Point brickLocation = brickie.getLocation();

brickLocation.x == 0brickLocation.y == 0

2 个答案:

答案 0 :(得分:2)

JComponent(s)只能返回其坐标,getBounds或getLocation

  • 如果容器已在屏幕上显示

  • pack()

  • 之后

答案 1 :(得分:2)

在布局管理器(您的GridLayout)自动分配按钮位置时,您正尝试更改按钮位置。这就是为什么你总是得到相同的价值 - 布局只是覆盖它。

为了能够手动更改任何组件边界/位置(包括按钮) - 您必须将“null”设置为容器的布局。之后只需根据需要更改位置/大小/边界,它将影响组件位置。

此外,您不需要使用“setVisible(true)” - 默认情况下,对于所有组件(即使那些尚未显示的组件),该标志为true。