首页 > 解决方案 > 我无法将多个摆动组件添加到 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);

这将显示logoJLabel 但不显示headerHTMLJLabel。如何按顺序显示两个 JLabel?

标签: javaswingjframe

解决方案


正如@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 位于中心


推荐阅读