【问题标题】:Reordering elements in BoxLayout在 BoxLayout 中重新排序元素
【发布时间】:2014-05-22 02:22:10
【问题描述】:

我有一个 BoxLayout (Y_AXIS),其中已经添加了一些 (FlowLayout) 元素,如下所示:

element1> ================= <element1
element2> ================= <element2
element3> ================= <element3

只是想知道是否有一种简单的方法可以在布局中交换这些元素的位置。即我可能想将 element3 向上移动和 element2 向下移动。

有没有类似的:

element3.setPosition(element2,ABOVE);

谢谢

编辑:找到this 解决方案。现在就试试吧

【问题讨论】:

  • @MadProgrammer,不错的建议,听起来像是对我的回答。
  • 这看起来不错@MadProgrammer。现在会试一试。干杯

标签: java swing layout boxlayout


【解决方案1】:

您可以考虑使用Container#setComponentZOrder

这将允许您更改组件在容器中出现的顺序(物理上更改它们的呈现和布局顺序)

int index = getComponentZOrder(element3);
setComponentZOrder(element3, --index);

请注意,您不能将 zorder 设置为低于 0 或高于 getComponentCount() - 1

【讨论】:

  • +1,好建议,删除/添加在一个语句中完成,只需更改 ZOrder。
  • 很好的答案!效果很好。没有意识到这一点。谢谢
  • @user1270235 这有点时髦,但可以完成工作;)
  • @user1270235,我希望您阅读 API 以真正理解此方法的作用,因为它只是 Swing 绘制组件的方式的副产品,它恰好起作用。 ZOrder 实际上是用来控制“组件堆叠”的。
【解决方案2】:

有没有什么...

您可以使用自己的方法来做到这一点:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

查看Container API 以了解有关这些方法的更多详细信息。

【讨论】:

  • 但问题在于它仍然只是将它们添加到列表的底部。我将不得不替换两个“移动”面板中的所有元素,这可能会变得混乱......
  • @user1270235,正如我所说,请阅读 API。 add(...) 方法有多个方法签名。 add(component, int) 方法允许您指定组件的插入位置。话虽如此,madprogrammer 建议使用 ZOrder 会更容易。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多