1

我正在使用 MigLayout,我想创建一个效果,比如使用 BoxLayout 的“胶水”来创建一个不可见的空间,该空间将灵活地填充两个组件之间的区域。从教程:

在此处输入图像描述 在此处输入图像描述

我了解在 MigLayout 中,间隙用于在组件之间创建空间。我可以用"gap 10". MiG Layout Cheatsheet 说我可以附加push到带有间隙的绑定大小以“使该间隙“贪婪”并占用任何剩余空间”(例如"gap rel:push"),但这在我的以下代码中似乎不起作用我试过:

JFrame frame = new JFrame("Test");
JPanel panel = new JPanel(new MigLayout());
JLabel label1 = new JLabel("Testing");
label1.setBorder(BorderFactory.createLineBorder(Color.black)); //Border to clearly show JLabel boundaries
panel.add(label1, "");
JLabel label2 = new JLabel("Testing Once Again");
label2.setBorder(BorderFactory.createLineBorder(Color.black)); //Border to clearly show JLabel boundaries
panel.add(label2, "gap rel:push");
frame.setContentPane(panel);
frame.pack();
frame.setMinimumSize(new Dimension(400, 100));
frame.setPreferredSize(new Dimension(400, 100));
frame.setVisible(true);

它显示一个像这样的窗口: 在此处输入图像描述

我希望该"gap rel:push"参数像上图中的水平胶水一样工作,从而将右侧的 JLabel 一直推到窗口的右边缘,但事实并非如此。

如何使用 MigLayout 获得与 BoxLayout 的胶水相同的效果?我是在滥用"gap"参数还是有其他方法可以完成它?

另外,我意识到我可以在给出的示例中使用停靠,但我想要一个没有它的答案,因为它在我正在创建的更复杂的布局中不起作用。

4

1 回答 1

2
  1. 节省一些理智点并在 MiGLayout: 上启用调试边框new MigLayout("debug")
  2. 间隙可能确实将组件推开,但布局并没有使用所有可用空间。如果您打开调试边界,这应该很明显。尝试使布局使用所有可用空间:new MigLayout("debug, fill").
  3. 您可能希望在两列之间放置一个间隙,而不是在标签和单元格边缘之间放置一个间隙:new MigLayout("debug, fill", "[]rel:push[]"). 使用多行布局时,差异应该会变得很明显。在这种情况下,您可能不需要fill约束:new MigLayout("debug", "[]rel:push[]").

我没有方便的编译器来运行它,但我希望我已经给了你一些可以使用的东西。

于 2013-05-02T13:30:07.373 回答