当前位置:首页 > Java

java如何绘画

2026-03-20 09:15:43Java

Java 绘图基础

Java 提供了多种绘图方式,主要通过 java.awtjavax.swing 包实现。绘图通常在 JPanelJComponentpaintComponent(Graphics g) 方法中进行。

创建自定义绘图组件需继承 JPanel 并重写 paintComponent 方法:

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

class MyPanel extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillRect(50, 50, 100, 100);
    }
}

基本图形绘制

使用 Graphics 对象可以绘制基本图形:

  • 画线:drawLine(int x1, int y1, int x2, int y2)
  • 画矩形:drawRect(int x, int y, int width, int height)
  • 画圆/椭圆:drawOval(int x, int y, int width, int height)
  • 画文本:drawString(String str, int x, int y)

示例代码:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawLine(10, 10, 100, 100);
    g.drawRect(120, 10, 80, 50);
    g.drawOval(220, 10, 80, 50);
    g.drawString("Hello", 320, 50);
}

高级绘图(Graphics2D)

Graphics2DGraphics 的子类,提供更强大的功能:

  • 设置笔画粗细:setStroke(Stroke s)
  • 旋转/缩放:rotate(double theta), scale(double sx, double sy)
  • 抗锯齿:setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)

示例:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setStroke(new BasicStroke(5));
    g2d.setColor(Color.BLUE);
    g2d.drawRect(50, 50, 100, 100);
}

双缓冲技术

避免闪烁可使用双缓冲:

class DoubleBufferedPanel extends JPanel {
    private BufferedImage buffer;

    public DoubleBufferedPanel() {
        buffer = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics bufferGraphics = buffer.getGraphics();
        // 在缓冲图像上绘制
        bufferGraphics.setColor(Color.WHITE);
        bufferGraphics.fillRect(0, 0, 400, 400);
        bufferGraphics.setColor(Color.RED);
        bufferGraphics.fillOval(100, 100, 200, 200);
        // 将缓冲图像绘制到屏幕上
        g.drawImage(buffer, 0, 0, this);
    }
}

绘制图像文件

加载并绘制图像文件:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    try {
        Image image = ImageIO.read(new File("image.png"));
        g.drawImage(image, 0, 0, this);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

动画实现

通过定时重绘实现动画效果:

class AnimationPanel extends JPanel {
    private int x = 0;

    public AnimationPanel() {
        Timer timer = new Timer(50, e -> {
            x = (x + 5) % getWidth();
            repaint();
        });
        timer.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.fillOval(x, 50, 50, 50);
    }
}

坐标系变换

使用 Graphics2D 进行坐标变换:

java如何绘画

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(getWidth()/2, getHeight()/2);
    g2d.rotate(Math.PI/4);
    g2d.drawRect(-50, -50, 100, 100);
}

标签: java
分享给朋友:

相关文章

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…

java版本如何查看

java版本如何查看

查看Java版本的命令行方法 在命令行或终端中运行以下命令可以查看当前安装的Java版本: java -version 输出示例: java version "1.8.0_301" Java(TM…