Java Graphics2D 边框增加样式

在 Java 中,我们经常需要绘制图形来展示数据或实现一些定制化的界面效果。Graphics2D 类是 Java 提供的一个强大的绘图工具,它可以绘制各种形状、线条和文本,并支持设置边框样式。本文将介绍如何使用 Graphics2D 绘制带有边框样式的图形。

Graphics2D 概述

Graphics2D 是 java.awt 包中的一个类,是 Graphics 类的子类。它提供了更强大和灵活的绘图功能,可以绘制各种基本形状(如线条、矩形、椭圆等)和复杂形状(如路径、曲线等)。

要使用 Graphics2D 绘制图形,首先需要获取 Graphics2D 对象。可以通过调用 Component 类的 getGraphics() 方法获取到 Graphics 对象,然后将其转换为 Graphics2D 对象。

// 获取 Graphics2D 对象
Graphics2D g2d = (Graphics2D) graphics;

绘制带有边框样式的图形

要绘制带有边框样式的图形,可以使用 Graphics2D 的 setStroke() 方法设置边框的样式。Stroke 是一个接口,提供了设置边框样式的方法。Java 提供了两个实现了 Stroke 接口的类:BasicStroke 和 GradientStroke。

使用 BasicStroke 绘制边框

BasicStroke 类是 Stroke 接口的一个实现,它可以绘制简单的线条边框。我们可以通过设置线条的宽度、端点样式和连接样式来定制边框样式。

// 创建 BasicStroke 对象,设置线条宽度为3,端点样式为圆形,连接样式为圆角
Stroke stroke = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);

// 设置 Graphics2D 的边框样式
g2d.setStroke(stroke);

使用 GradientStroke 绘制渐变边框

GradientStroke 类是 Stroke 接口的另一个实现,它可以绘制渐变的线条边框。我们可以通过设置起始颜色、终止颜色和渐变方向来定制边框样式。

// 创建起始颜色为红色,终止颜色为绿色的渐变边框
Color startColor = Color.RED;
Color endColor = Color.GREEN;
Point2D startPoint = new Point2D.Float(0, 0);
Point2D endPoint = new Point2D.Float(100, 0);
float[] fractions = {0.0f, 1.0f};
Color[] colors = {startColor, endColor};
Stroke stroke = new GradientStroke(startPoint, endPoint, fractions, colors);

// 设置 Graphics2D 的边框样式
g2d.setStroke(stroke);

示例:绘制带有边框样式的矩形

下面是一个示例,演示了如何使用 Graphics2D 绘制带有边框样式的矩形:

import java.awt.*;
import javax.swing.*;

public class BorderExample extends JFrame {

    public BorderExample() {
        setTitle("Border Example");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    @Override
    public void paint(Graphics graphics) {
        super.paint(graphics);
        
        // 获取 Graphics2D 对象
        Graphics2D g2d = (Graphics2D) graphics;

        // 创建 BasicStroke 对象,设置线条宽度为3,端点样式为圆形,连接样式为圆角
        Stroke stroke = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);

        // 设置 Graphics2D 的边框样式
        g2d.setStroke(stroke);

        // 绘制矩形
        g2d.drawRect(50, 50, 300, 200);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            BorderExample example = new BorderExample();
            example.setVisible(true);
        });
    }
}

上述代码中,我们创建了一个继承自 JFrame 的 BorderExample 类,并重写了其 paint() 方法。在 paint() 方法中,我们首先获取 Graphics