首页 > 解决方案 > 添加 Spring 布局时,GUI 不会显示标签和文本字段

问题描述

我首先使用网格布局,然后我意识到我想使用弹簧布局。当我添加 Spring 布局面板时,什么都不想显示

public class ComplexWindow extends JFrame {

    public ComplexWindow() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(10, 10, 300, 420);
        JPanel mainPanel = (JPanel) getContentPane();
        mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        mainPanel.setLayout(new BorderLayout());
        SpringLayout layout = new SpringLayout();
        JPanel textPanel = new JPanel(layout);
        JLabel lblName = new JLabel("Ime:");
        textPanel.add(lblName);
        JTextField txtName = new JTextField();
        txtName.setColumns(10);
        textPanel.add(txtName);
        JLabel lblSurname = new JLabel("Prezime:");
        textPanel.add(lblSurname);
        JTextField txtSurname = new JTextField();
        txtSurname.setColumns(10);
        textPanel.add(txtSurname);
        layout.putConstraint(SpringLayout.EAST, lblName, 5, 
            SpringLayout.WEST, txtName);
        layout.putConstraint(SpringLayout.SOUTH, lblName, 5, 
            SpringLayout.NORTH, lblSurname);
        layout.putConstraint(SpringLayout.SOUTH, txtName, 5, 
            SpringLayout.NORTH, txtSurname);
        layout.putConstraint(SpringLayout.EAST, lblSurname, 5, 
            SpringLayout.WEST, txtSurname);
        mainPanel.add(textPanel, BorderLayout.NORTH);
    }

    public static void main(String [] args) {
        SwingUtilities.invokeLater(() -> {
            ComplexWindow window = new ComplexWindow();
            window.pack();
            window.setVisible(true);
        });
    }
}

标签: javaswingjframelayout-managerborder-layout

解决方案


正如本文档所述,SpringLayout不适用于手动布局组件:
https ://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html

然而,SpringLayout 是非常低级的,因此您真的应该只将它与 GUI 构建器一起使用,而不是尝试手动编写 spring 布局管理器。

而且,上面教程layout.SpringUtilities中使用的实用程序类不包含在 JDK 中。

所以,我建议你使用GridBagLayout这个。


推荐阅读