4

使用布局时如何在框架中移动组件?我试过这个:

    System.out.println(test1.getLocation());
    int oy = test1.getY();
    int ox = test1.getX();
    oy++;
    ox++;
    test1.setLocation(ox, oy);
    validate();
    test1.validate();
    System.out.println(test1.getLocation());

第一个位置与最后一个位置相同。我知道您在正常布局中无法更改位置,但是您如何完成呢?我以前也问过类似的问题,但从未得到答案。我已经在整个互联网上搜索了这个,但我还没有找到答案。

TL;DR - 你如何移动一个组件?

4

3 回答 3

3

问题是LayoutManager面板正在为您设置标签的位置。

您需要做的是将布局设置为null

setLayout(null);

这将使框架/面板不会尝试自行布局组件。

然后setBounds(Rectangle rect)在标签上调用。像这样:

lbl.setBounds(new Rectangle(new Point(200, 300), lbl.getPreferedSize())); 这应该将组件放置在您想要的位置。

但是,如果您没有真正充分的理由自己布置组件,那么使用LayoutManagers 来为您工作通常是一个更好的主意。

是一个关于开始使用LayoutManagers 的很棒的教程,如果你必须使用绝对,那么看看这个教程

于 2012-09-07T22:06:24.233 回答
3

可能会帮助您查看DragLayout并与ComponentMover结合,由@camickr

于 2012-09-07T22:14:38.650 回答
2

setLocation()方法在将布局设置为null. 如果您使用的是布局管理器,那么一种选择是从其容器中删除组件并使用新的布局约束将其添加回来。

于 2012-09-07T22:09:25.930 回答