java - 我无法将多个摆动组件添加到 jframe
问题描述
我正在使用 Swing 创建这个简单的 GUI,但我不能添加多个 Swing 组件。如果我添加一个带有 的组件frame.getContentPane().add(component)
,并且已经添加了一个组件,它会隐藏第一个组件并显示第二个。我是 Swing 新手,不知道如何解决这个问题。我试过颠倒添加的顺序,但它仍然只显示添加的第二个组件。这是我的一些代码:
JFrame frame = new JFrame("Title");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JLabel headerHTML = new JLabel("<html><h1 style='font-size: 50px; border-bottom: 2px solid black'>Header</h1></html>");
ImageIcon logoImage = new ImageIcon("img/logo.png");
JLabel logo = new JLabel(logoImage);
frame.getContentPane().add(headerHTML);
frame.getContentPane().add(logo);
frame.pack();
frame.setVisible(true);
这将显示logo
JLabel 但不显示headerHTML
JLabel。如何按顺序显示两个 JLabel?
解决方案
正如@bear 提到的,你想添加使用
frame.add(JComponent component);
方法。但是,您不应该尝试将 JLabels 和其他 JComponent 直接添加到框架中。相反,您希望将 JPanel 添加到框架中:首先,设置面板的布局并将 JComponents 添加到面板。然后将面板添加到框架中(见下文)。使用 Layout 的原因是因为它可以最大限度地减少您遇到的错误数量。这是 Swing 中布局管理器的链接:https ://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
找到您喜欢的布局后,您可以对其进行更多研究。
JPanel panel = new JPanel();
panel.setLayout(new Layout()) //whatever layout you choose
panel.add(...) //add your JComponents
frame.add(panel);
frame.setVisible(true);
编辑:正如@camickr 所说,JComponents 可以直接添加到框架中,但是,框架使用带有 BorderLayout 布局的 JPanel 作为其内容。因此,在调用 add() 方法时,BorderLayout 会将组件放置在中心。两次调用 add() 方法将不起作用,因为要求 2 个 JComponents 位于中心
推荐阅读
- javascript - 基于对象的日期、时间排序数组
- python - 如何使用 python(服务器)和 Angular(客户端)从 SQL Server 发送 pdf 数据和保存
- css - 以字体显示标题 - 真棒图标
- php - simplexml_load_file 通过 url 读取远程 xml,由对等方重置连接
- sql-server - 在临时表中插入相同表和不同变量的值
- javascript - 在数组中查找模式
- java - Vaadin Flow:组件和元素之间的区别
- sql - 修剪字符串直到一个值
- python - numpy数组的元素之和与总数不同
- typo3 - TYPO3 Gridelements 使用 Fluidtemplate 渲染 FAL 图像