JLabel文本水平居中及通过FontMetrics手动调整位置的实现方法
Swing JLabel 居中相关需求实现方案
1. JLabel文本水平居中+单独调整垂直位置
你当前用的是null空布局(手动调用setBounds的前提),直接用JLabel内置属性即可实现需求:
- 水平文本居中:调用
setHorizontalAlignment(JLabel.CENTER),该属性会让标签内部的文本自动水平居中,你只需要保证标签宽度和你要对齐的区域(比如对应JTextField)宽度一致即可 - 单独调整垂直位置:直接修改每个标签
setBounds方法的第二个y坐标参数即可,各标签的y值独立设置互不影响
示例代码:
// 首先确认JPanel使用空布局 jPanel.setLayout(null); // 第一个标签 JLabel userLabel = new JLabel("账号"); // 开启文本水平居中 userLabel.setHorizontalAlignment(JLabel.CENTER); // bounds参数:x坐标和对应输入框一致,y=80(自定义垂直位置),宽度240和输入框一致,高度30 userLabel.setBounds(180, 80, 240, 30); jPanel.add(userLabel); // 第二个标签,修改y参数调整垂直位置 JLabel pwdLabel = new JLabel("密码"); pwdLabel.setHorizontalAlignment(JLabel.CENTER); pwdLabel.setBounds(180, 150, 240, 30); jPanel.add(pwdLabel);
2. 用FontMetrics手动计算实现文本居中
如果你需要完全手动控制位置,不需要JLabel内置对齐能力,按以下步骤操作:
- 获取标签使用字体对应的
FontMetrics对象 - 调用
stringWidth()方法获取文本的像素宽度,调用getHeight()获取文本的像素高度 - 计算居中的x坐标:如果是相对于父容器居中,公式为
(父容器宽度 - 文本宽度) / 2;如果是相对于对应输入框居中,公式为输入框x坐标 + (输入框宽度 - 文本宽度) / 2 - 自定义y坐标调整垂直位置,最后调用
setBounds设置参数即可
示例代码:
JLabel emailLabel = new JLabel("绑定邮箱"); // 获取字体与FontMetrics对象 Font font = emailLabel.getFont(); FontMetrics metrics = emailLabel.getFontMetrics(font); // 计算文本宽高 int textWidth = metrics.stringWidth(emailLabel.getText()); int textHeight = metrics.getHeight(); // 计算水平居中x坐标(假设JPanel宽度为600) int centerX = (600 - textWidth) / 2; // 自定义垂直位置y坐标 int customY = 220; // 设置标签bounds emailLabel.setBounds(centerX, customY, textWidth, textHeight); jPanel.add(emailLabel);
注意:如果后续修改了标签的字体大小、字体类型,需要重新计算文本宽高再设置bounds,否则居中效果会失效。
内容的提问来源于stack exchange,提问作者learningJava2020
相关产品推荐
相关产品推荐

