Java Swing开发JButton不显示文本问题求助(附实现源码)
问题原因及修复方案
你的代码问题出在布局管理器的设置顺序和常量调用错误两个核心点,具体修改如下:
核心错误点
- 布局设置顺序颠倒:
JPanel必须先设置为空布局setLayout(null),再添加子组件、调用setBounds()指定组件位置,否则子组件的尺寸位置配置不生效,会导致按钮文本被挤压无法显示 - 窗口关闭常量调用错误:
EXIT_ON_CLOSE是JFrame类的静态常量,必须加类名前缀才能正确调用
修改后的可运行代码
import javax.swing.*; import java.awt.*; class FrameDemo{ JButton b1; FrameDemo(){ b1 = new JButton("+"); b1.setFont(new Font("Tahoma", Font.BOLD, 11)); b1.setBounds(10, 60, 39, 23); JPanel panel = new JPanel(); // 先设置空布局,再添加组件 panel.setLayout(null); panel.add(b1); panel.setSize(246,281); JFrame frame = new JFrame("My Calculator"); frame.setResizable(false); frame.setSize(266,303); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(panel); // 所有组件添加完成后再设窗口可见 frame.setVisible(true); } public static void main(String[] args) { // Swing组件建议在事件调度线程中初始化,避免渲染异常 SwingUtilities.invokeLater(() -> new FrameDemo()); } }
额外优化建议
- 不推荐使用空布局(null layout),如果是开发计算器类的网格布局界面,使用
GridLayout可以自动适配组件大小,不需要手动写setBounds,也不会出现分辨率适配问题 - 建议类名遵循Java大驼峰命名规范,不要用小写
frame作为类名
内容的提问来源于stack exchange,提问作者M k.
相关产品推荐
相关产品推荐

