java - 我如何获得 LinearLayout,其中组件在 Swing 中彼此堆叠?

标签 java swing layout android-linearlayout layout-manager

我正在尝试创建自定义 JDialog。我想让组件以它们喜欢的高度堆叠在一起,但宽度应该填满容器。类似于 LinearLayout在安卓系统中。我希望组件在调整窗口大小时保持其首选高度。

来自 Using Layout Managers :

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 布局方面的问题: A Dialog

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/

相关文章:

c++ - 如何为布局激活 adjustsize()

java - springboot @EnableConfigurationProperties 不起作用

java - 切换 JTextField 可见性

java - 如何让两个 JPanel 水平拆分,每个 JPanel 始终占据屏幕的一半?

javascript - 获取屏幕、当前网页和浏览器窗口的大小

javascript - 如何在使用库 react-cytoscape.js 进行一些拖动操作后重置为初始坐标

java - 没有视觉出现

java - JFace 向导的默认大小是多少?怎么知道呢?

java - 阻止 WebView 显示 "web page not available"

java - 在 javaFX 中运行 swing 应用程序