我正在尝试创建一个自定义JDialog
. 我想让组件以它们的首选高度堆叠在一起,但宽度应该填满容器。类似于LinearLayout
在安卓中。我希望在调整窗口大小时组件保持其首选高度。
从使用布局管理器:
场景:您需要以自然大小在紧凑的行中显示一些组件。
考虑使用 JPanel 对组件进行分组,并使用 JPanel 的默认 FlowLayout 管理器或 BoxLayout 管理器。SpringLayout 对此也有好处。
例如,我想要一个JTextField
以上的JTabbedPane
. 我已尝试使用所有建议的布局管理器 FlowLayout、BoxLayout、SpringLayout,但当JDialog
窗口高度增加时,它们不会保留我的组件的自然大小。
Java Swing 中是否有任何布局管理器可以用于我的情况?
这是一个小例子,展示了我对 Swing 布局的问题:
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class TestDialog extends JDialog {
public TestDialog() {
setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
//setLayout(new SpringLayout());
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
JTextField field3 = new JTextField();
JTextField field4 = new JTextField();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.setLayout(new BoxLayout(panel1, BoxLayout.PAGE_AXIS));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.PAGE_AXIS));
panel1.add(field2);
panel2.add(field3);
panel2.add(field4);
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("Tab 1", panel1);
tabs.addTab("Tab 2", panel2);
add(field1);
add(tabs);
//field1.setMaximumSize(field1.getPreferredSize());
//SpringUtilities.makeCompactGrid(this.getContentPane(), 2, 1, 2, 2, 2, 2);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new TestDialog();
}
}