我正在尝试创建自定义 JDialog
。我想让组件以它们喜欢的高度堆叠在一起,但宽度应该填满容器。类似于 LinearLayout
在安卓系统中。我希望组件在调整窗口大小时保持其首选高度。
Scenario: You need to display a few components in a compact row at their natural size.
Consider using a JPanel to group the components and using either the JPanel's default FlowLayout manager or the BoxLayout manager. SpringLayout is also good for this.
例如我希望在 JTabbedPane
之上有一个 JTextField
。我尝试了所有建议的布局管理器 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();
}
}
最佳答案
I would like to have a JTextField above a JTabbedPane. I have tried with all the suggested layout managers
垂直的 BoxLayout 应该可以正常工作。如果在增加框架尺寸时组件变大,那么您可能需要添加:
textField.setMaximumSize( textField.getPreferredSize() );
tabbedPane.setMaximumSize( tabbedPane.getPreferredSize() );
如果您需要更多帮助,请发布 SSCCE这说明了问题。
编辑:
您需要指定文本字段的首选大小。这是通过使用:
JTextField textField = new JTextField(10);
关于java - 我如何获得 LinearLayout,其中组件在 Swing 中彼此堆叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715216/