📅  最后修改于: 2023-12-03 15:31:32.248000             🧑  作者: Mango
在 Java Swing 中,我们可以使用 Graphics2D 和 FontMetrics 类来绘制居中文本。以下是一个示例代码片段,演示了如何在一个 JPanel 中居中绘制一个字符串:
import java.awt.*;
import javax.swing.*;
public class CenteredTextPanel extends JPanel {
private String text;
public CenteredTextPanel(String text) {
this.text = text;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 获取面板的宽度和高度
int panelWidth = getWidth();
int panelHeight = getHeight();
// 设置字体
Font font = new Font("SansSerif", Font.PLAIN, 16);
g2d.setFont(font);
// 获取字体测量信息
FontMetrics fontMetrics = g2d.getFontMetrics();
int stringWidth = fontMetrics.stringWidth(text);
int stringHeight = fontMetrics.getHeight();
// 计算文本的 x 和 y 坐标,使其居中
int x = (panelWidth - stringWidth) / 2;
int y = (panelHeight - stringHeight) / 2 + fontMetrics.getAscent();
// 绘制文本
g2d.drawString(text, x, y);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Centered Text Panel Demo");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CenteredTextPanel panel = new CenteredTextPanel("Hello, World!");
frame.add(panel);
frame.setVisible(true);
}
}
在上面的代码中,我们创建了一个名为 CenteredTextPanel
的 JPanel 子类,该子类接受一个字符串,并重写了 paintComponent
方法以绘制字符串。
在 paintComponent
方法中,我们首先获取了面板的宽度和高度。然后,我们设置了字体,并使用 FontMetrics
类获取了该字体下字符串的宽度和高度。接下来,我们计算文本的 x 和 y 坐标,使其居中,并使用 drawString
方法将文本绘制到面板上。
最后,我们创建了一个 JFrame,并添加了我们的 CenteredTextPanel 实例。运行程序后,你将看到一个居中的 "Hello, World!" 文本。