Java Swing问题:同时设置JFrame不可调整大小与JLabel图标时内容不显示
问题解决方法
核心问题在于你把窗口显示代码frame.setVisible(true)放在了组件添加之前,当同时设置窗口不可调整大小(setResizable(false))和加载图片时,窗口初始化完成后新增的组件无法触发界面重绘,导致内容无法显示。
修复后的代码
package ui; import java.awt.*; import java.io.IOException; import javax.swing.*; public class Main { public static void main(String[] args) throws IOException { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(1600, 900); frame.setLayout(null); frame.setBackground(new Color(0xFAFAFA)); frame.setTitle("App !"); frame.setResizable(false); // LINE A JLabel label = new JLabel(); label.setText("Hello world!"); label.setIcon(new ImageIcon("assets/logo-50x50.png")); // LINE B label.setBackground(Color.red); label.setOpaque(true); // 新增:让背景色生效 label.setBounds(0, 0, 250, 250); frame.add(label); frame.setVisible(true); // 移到所有组件添加完成后执行 } }
关键修改点
- 调整窗口显示时机:所有组件添加完成后再调用
frame.setVisible(true),确保窗口初始化时就能加载所有组件 - 添加JLabel不透明设置:
JLabel默认是透明的,setBackground不会生效,加上setOpaque(true)才能看到红色背景 - 保持
setResizable(false)的位置:放在窗口显示前执行,不影响组件加载
内容的提问来源于stack exchange,提问作者8c6b5df0d16ade6c
相关产品推荐
相关产品推荐

