本文目录导读:

我来为您介绍Java Graphics2D绘制图形和文字的方法。
基本设置
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;
public class Graphics2DDemo extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 开启抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// 设置背景色
g2d.setBackground(Color.WHITE);
g2d.clearRect(0, 0, getWidth(), getHeight());
}
}
绘制基本图形
private void drawShapes(Graphics2D g2d) {
// 1. 绘制直线
g2d.setColor(Color.RED);
g2d.setStroke(new BasicStroke(2.0f));
g2d.drawLine(50, 50, 200, 50); // 起点(x1,y1)到终点(x2,y2)
// 2. 绘制矩形
g2d.setColor(Color.BLUE);
g2d.drawRect(50, 80, 150, 100); // 空心矩形
g2d.fillRect(250, 80, 150, 100); // 填充矩形
// 3. 绘制圆角矩形
g2d.setColor(Color.GREEN);
g2d.drawRoundRect(50, 200, 150, 100, 20, 20); // 空心圆角矩形
g2d.fillRoundRect(250, 200, 150, 100, 20, 20); // 填充圆角矩形
// 4. 绘制椭圆和圆
g2d.setColor(Color.ORANGE);
g2d.drawOval(50, 330, 150, 100); // 空心椭圆
g2d.fillOval(250, 330, 100, 100); // 填充圆
// 5. 绘制弧形
g2d.setColor(Color.MAGENTA);
g2d.drawArc(50, 460, 150, 100, 0, 180); // 空心弧
g2d.fillArc(250, 460, 150, 100, 0, 180); // 填充弧
}
高级图形绘制
private void drawAdvancedShapes(Graphics2D g2d) {
g2d.setStroke(new BasicStroke(2.0f));
// 1. 绘制多边形
int[] xPoints = {100, 200, 250, 150, 50};
int[] yPoints = {100, 80, 180, 250, 180};
g2d.setColor(Color.CYAN);
g2d.drawPolygon(xPoints, yPoints, 5); // 空心多边形
g2d.fillPolygon(xPoints, yPoints, 5); // 填充多边形
// 2. 贝塞尔曲线
CubicCurve2D cubicCurve = new CubicCurve2D.Float();
cubicCurve.setCurve(50, 300, 150, 100, 200, 500, 300, 300);
g2d.setColor(Color.RED);
g2d.draw(cubicCurve);
// 3. 二次曲线
QuadCurve2D quadCurve = new QuadCurve2D.Float();
quadCurve.setCurve(50, 400, 150, 200, 300, 400);
g2d.setColor(Color.BLUE);
g2d.draw(quadCurve);
// 4. 绘制任意形状
GeneralPath path = new GeneralPath();
path.moveTo(100, 500);
path.lineTo(150, 550);
path.curveTo(200, 500, 250, 600, 300, 500);
path.closePath();
g2d.setColor(new Color(100, 150, 200, 100)); // 半透明
g2d.fill(path);
g2d.setColor(Color.DARK_GRAY);
g2d.draw(path);
}
文字绘制
private void drawText(Graphics2D g2d) {
// 1. 基本文字绘制
g2d.setColor(Color.BLACK);
g2d.setFont(new Font("宋体", Font.PLAIN, 20));
g2d.drawString("Hello World!", 50, 50);
// 2. 设置字体样式
Font font = new Font("Arial", Font.BOLD | Font.ITALIC, 24);
g2d.setFont(font);
g2d.setColor(Color.RED);
g2d.drawString("加粗斜体文字", 50, 100);
// 3. 文字旋转
Graphics2D g2dRotate = (Graphics2D) g2d.create();
g2dRotate.rotate(Math.toRadians(45), 200, 150);
g2dRotate.setFont(new Font("微软雅黑", Font.PLAIN, 18));
g2dRotate.setColor(Color.BLUE);
g2dRotate.drawString("旋转文字", 200, 150);
g2dRotate.dispose();
// 4. 文字阴影效果
g2d.setFont(new Font("仿宋", Font.PLAIN, 30));
g2d.setColor(Color.GRAY);
g2d.drawString("阴影效果", 53, 253); // 阴影
g2d.setColor(Color.BLACK);
g2d.drawString("阴影效果", 50, 250); // 正文字
// 5. 获取字体度量信息
g2d.setFont(new Font("Times New Roman", Font.PLAIN, 20));
FontMetrics fm = g2d.getFontMetrics();
String text = "字体度量测试";
int textWidth = fm.stringWidth(text);
int textHeight = fm.getHeight();
int ascent = fm.getAscent();
g2d.setColor(Color.BLACK);
g2d.drawString(text, 50, 300);
g2d.drawRect(50, 300 - ascent, textWidth, textHeight); // 文字边界框
}
使用GlyphVector绘制文字
private void drawTextWithGlyphVector(Graphics2D g2d) {
Font font = new Font("Serif", Font.BOLD, 36);
String text = "特效文字";
// 创建GlyphVector
FontRenderContext frc = g2d.getFontRenderContext();
GlyphVector gv = font.createGlyphVector(frc, text);
// 获取每个字符的形状
Shape glyphShape = gv.getOutline();
// 设置渐变
GradientPaint gradient = new GradientPaint(
50, 400, Color.BLUE,
350, 400, Color.RED
);
g2d.setPaint(gradient);
g2d.fill(glyphShape);
// 描边
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(2.0f));
g2d.draw(glyphShape);
}
完整示例
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class CompleteGraphicsDemo extends JPanel {
public CompleteGraphicsDemo() {
setPreferredSize(new Dimension(600, 600));
setBackground(Color.WHITE);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 开启抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// 保存原始变换
AffineTransform oldTransform = g2d.getTransform();
// 1. 绘制标题
g2d.setFont(new Font("微软雅黑", Font.BOLD, 24));
g2d.setColor(Color.BLACK);
g2d.drawString("Graphics2D 图形文字综合示例", 150, 30);
// 2. 绘制图形
drawShapes(g2d);
// 3. 绘制文字
drawTextWithEffects(g2d);
// 4. 绘制带边框的图形
drawOutlinedShapes(g2d);
// 恢复变换
g2d.setTransform(oldTransform);
}
private void drawShapes(Graphics2D g2d) {
// 图形
g2d.setColor(new Color(100, 200, 100));
g2d.fillOval(50, 50, 100, 100);
g2d.setColor(new Color(200, 100, 100));
g2d.fillRect(200, 50, 100, 100);
g2d.setColor(new Color(100, 100, 200));
g2d.fillRoundRect(350, 50, 100, 100, 30, 30);
}
private void drawTextWithEffects(Graphics2D g2d) {
// 文字阴影
g2d.setFont(new Font("宋体", Font.BOLD, 28));
// 阴影
g2d.setColor(new Color(150, 150, 150, 100));
g2d.drawString("图形与文字", 53, 230);
// 原文
g2d.setColor(Color.BLUE);
g2d.drawString("图形与文字", 50, 230);
// 旋转文字
Graphics2D g2dRotated = (Graphics2D) g2d.create();
g2dRotated.rotate(Math.toRadians(-15), 150, 300);
g2dRotated.setColor(Color.MAGENTA);
g2dRotated.setFont(new Font("微软雅黑", Font.ITALIC, 20));
g2dRotated.drawString("旋转的文字效果", 50, 300);
g2dRotated.dispose();
}
private void drawOutlinedShapes(Graphics2D g2d) {
// 带边框的图形
g2d.setColor(Color.YELLOW);
g2d.fillOval(100, 350, 80, 80);
g2d.setColor(Color.ORANGE);
g2d.setStroke(new BasicStroke(3.0f));
g2d.drawOval(100, 350, 80, 80);
// 多边形的边框
int[] xPoints = {250, 300, 350, 300, 250};
int[] yPoints = {350, 390, 350, 410, 390};
g2d.setColor(new Color(255, 200, 100, 150));
g2d.fillPolygon(xPoints, yPoints, 5);
g2d.setColor(Color.RED);
g2d.setStroke(new BasicStroke(2.0f));
g2d.drawPolygon(xPoints, yPoints, 5);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Graphics2D Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new CompleteGraphicsDemo());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
- 抗锯齿:开启抗锯齿使图形边缘更平滑
- 字体设置:使用
Font类设置字体、样式和大小 - 坐标变换:使用
rotate(),translate(),scale()等方法 - 颜色控制:使用
Color类设置颜色,支持透明度 - Stroke设置:使用
BasicStroke控制线条宽度和样式 - 字体度量:使用
FontMetrics获取文字尺寸信息
这些示例涵盖了 Graphics2D 绘制图形和文字的主要功能,您可以根据实际需求调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播