📜  java swing 绘制居中文本 - Java (1)

📅  最后修改于: 2023-12-03 15:31:32.248000             🧑  作者: Mango

Java Swing 绘制居中文本

在 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!" 文本。