java - 添加 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);
});
}
}
解决方案
正如本文档所述,SpringLayout
不适用于手动布局组件:
https ://docs.oracle.com/javase/tutorial/uiswing/layout/spring.html
然而,SpringLayout 是非常低级的,因此您真的应该只将它与 GUI 构建器一起使用,而不是尝试手动编写 spring 布局管理器。
而且,上面教程layout.SpringUtilities
中使用的实用程序类不包含在 JDK 中。
所以,我建议你使用GridBagLayout
这个。
推荐阅读
- python-3.x - Pandas Oracle 查询给出“ORA-00911:无效字符”
- git - 詹金斯的 git checkout 期间出现致命错误“早期 EOF”
- python - 如何在 PySide 中创建带标签的 QProgressBar?
- linux - 非特权恶意进程 (Linux) 的 SetUID 安全问题
- java - Android:为什么当我编辑绑定到使用 dataBinding 的 editText 时我的 viewModel 没有更新
- .htaccess - MVC htaccess 块 javascript
- mongodb - 在我的电子商务网站上保留购物车项目
- reactjs - 循环通过 JSX.Elements 的 [] 并向其中动态添加类
- c++ - GCC C++14/17 成员函数指针模板参数的区别
- c# - 通过控制器注入时,作用域生命周期服务变为单例