如何在布局中移动组件?

时间:2012-09-07 21:58:37

标签: java swing components jlabel

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

    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 - 如何移动组件?

3 个答案:

答案 0 :(得分:3)

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

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

setLayout(null);

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

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

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

但是,如果您没有一个非常好的理由自己布置组件,通常最好使用LayoutManager s对您有利。

Here是开始使用LayoutManager的一个很好的教程,如果你必须使用绝对,那么看看this教程

答案 1 :(得分:3)

可以帮助您查看DragLayout并与@camickr

组成的ComponentMover结合使用

答案 2 :(得分:2)

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