1

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

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

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

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

编辑:

构造函数(我制作的砖类,扩展了 JButton):

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

我在 2 个 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 == 0和_brickLocation.y == 0

4

2 回答 2

2

JComponent(s)可以返回其坐标、getBounds 或getLocation

  • 如果容器已经在屏幕上可见

  • pack()

于 2012-06-05T06:48:44.980 回答
2

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

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

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

于 2012-06-05T06:48:48.780 回答