Java如何drawstring
Java 中使用 drawString 绘制文本
在 Java 中,drawString 是 Graphics 类的一个方法,用于在图形上下文中绘制文本。以下是使用 drawString 的详细方法:
基本用法
drawString 方法的基本语法如下:
void drawString(String str, int x, int y)
str:要绘制的文本字符串。x:文本基线的起始 x 坐标。y:文本基线的起始 y 坐标。
示例代码
以下是一个简单的示例,展示如何在 JPanel 的 paintComponent 方法中使用 drawString:
import javax.swing.*;
import java.awt.*;
public class DrawStringExample extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Hello, World!", 50, 50);
}
public static void main(String[] args) {
JFrame frame = new JFrame("DrawString Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.add(new DrawStringExample());
frame.setVisible(true);
}
}
设置字体和颜色
可以通过 Graphics 对象的 setFont 和 setColor 方法设置文本的字体和颜色:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(new Font("Arial", Font.BOLD, 20));
g.setColor(Color.RED);
g.drawString("Hello, World!", 50, 50);
}
使用 Graphics2D 增强功能
如果需要更高级的文本渲染功能(如抗锯齿),可以使用 Graphics2D:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setFont(new Font("Arial", Font.BOLD, 20));
g2d.setColor(Color.BLUE);
g2d.drawString("Hello, World!", 50, 50);
}
文本居中显示
如果需要将文本居中显示,可以计算文本的宽度和高度:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
String text = "Hello, World!";
FontMetrics fm = g.getFontMetrics();
int textWidth = fm.stringWidth(text);
int textHeight = fm.getHeight();
int x = (getWidth() - textWidth) / 2;
int y = (getHeight() - textHeight) / 2 + fm.getAscent();
g.drawString(text, x, y);
}
多行文本绘制
如果需要绘制多行文本,可以按行拆分字符串并逐行绘制:

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
String[] lines = {"Line 1", "Line 2", "Line 3"};
int y = 50;
for (String line : lines) {
g.drawString(line, 50, y);
y += g.getFontMetrics().getHeight();
}
}
注意事项
drawString的y参数是文本的基线(baseline)位置,而不是文本的顶部。- 如果需要精确控制文本位置,可以使用
FontMetrics计算文本的宽度和高度。 - 在 Swing 中,自定义绘图通常在
JPanel的paintComponent方法中完成,而不是直接在JFrame上绘制。





