我正在与MIGLayout
作斗争-我通常知道它的基础知识,但今天遇到了一个问题。
要简化情况,请执行以下操作:
我希望有三行,这样在第一行和第三行中就有不固定数量的对象(e.x。JTextField
组件)。第一行的第一个文本字段的宽度应该与第三行的第一个文本字段的宽度相同,以此类推。
行中的最后一个文本字段包含大多数文本字段,它应该随着框架大小的其余部分而增长。
这两行应该由JSeparator
区分,它也应该是帧的长度。
我已经看过How to draw a separator across a panel using MigLayout了,但是因为我需要字段在另一个字段下精确对齐,所以它对我不起作用。
这是我的代码:
public class Main extends JFrame {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
new Main();
}
public Main() {
setLayout(new MigLayout(new LC()));
setPreferredSize(new Dimension(800, 300));
CC cc = new CC().growX();
CC wcc = new CC().growX().wrap();
add(new JTextField("Area 1"), cc);
add(new JTextField("Area 2"), cc);
add(new JTextField("Area 3"), wcc);
add(new JSeparator(), new CC().spanX().pushX().growX().wrap());
add(new JTextField("Longer Area 1"), cc);
add(new JTextField("Longer Area 2"), cc);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}
它看起来是这样的:
这就是我想要的样子:
这个问题的最佳解决方案是什么?文本字段的数量将动态变化。提前谢谢。
发布于 2018-08-03 21:50:42
使用一个名为fill
的布局约束,并将所有内容设置为growx
。然后将spanx
添加到每行的最后一个组件。
您的示例看起来很奇怪的原因是您在fill
上使用了pushx
。
下面的示例生成此输出。
可运行的示例
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public class TextFieldsForEveryone extends JFrame {
private JPanel panel;
private TextFieldsForEveryone() {
setPreferredSize(new Dimension(800, 300));
setUp();
add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
private void setUp() {
panel = new JPanel(new MigLayout("fillx"));
panel.add(new JTextField("Area 1"), "growx");
panel.add(new JTextField("Area 2"), "growx");
panel.add(new JTextField("Area 3"), "growx, spanx, wrap");
panel.add(new JSeparator(), "growx, spanx, wrap");
panel.add(new JTextField("Longer Area 1"), "growx");
panel.add(new JTextField("Longer Area 2"), "growx, spanx");
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> new TextFieldsForEveryone());
}
}
https://stackoverflow.com/questions/50822776
复制相似问题