【问题标题】:How do I move a component in a layout?如何在布局中移动组件?
【发布时间】:2012-09-01 19:11:42
【问题描述】:

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

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

【问题讨论】:

  • Swing 将每个组件 BorderLayout 作为默认布局管理器。尝试使用setLayoutManager(null) 关闭面板以启用绝对定位。
  • @millimoose:不,JFrame的默认布局是BorderLayoutJPanel的默认布局是FlowLayout不需要绝对定位。
  • 另见examplevariation

标签: java swing components jlabel


【解决方案1】:

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

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

setLayout(null);

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

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

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

但是,如果您没有真正充分的理由自己布置组件,则最好使用LayoutManagers 来帮助您。

Here 是一个很好的使用 LayoutManagers 的入门教程,如果您必须使用绝对值,请查看 this 教程

【讨论】:

  • 技术上正确,但不推荐 - 永远不要没有 LayoutManager。
【解决方案2】:

可以帮助您查看DragLayout并与ComponentMover结合,由@camickr制作

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多