当前位置:首页 > Java

java如何重复画图

2026-03-23 18:51:18Java

使用循环结构重复绘制图形

在Java中,可以通过循环结构(如forwhile循环)结合绘图方法实现重复画图。以下示例使用Graphics类的fillRect方法在JPanel上重复绘制矩形:

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

public class RepeatDrawing extends JPanel {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < 10; i++) {
            g.fillRect(i * 30, i * 30, 20, 20);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.add(new RepeatDrawing());
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

利用定时器实现动画效果

通过javax.swing.Timer可以实现周期性重绘,形成动态重复绘图效果:

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

public class AnimatedDrawing extends JPanel {
    private int x = 0;

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

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

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.add(new AnimatedDrawing());
        frame.setSize(400, 150);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

使用BufferedImage实现离屏绘制

对于复杂重复图形,可先绘制到BufferedImage再重复渲染:

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

public class BufferedImageDrawing extends JPanel {
    private BufferedImage buffer;

    public BufferedImageDrawing() {
        buffer = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = buffer.createGraphics();
        g2d.setColor(Color.BLUE);
        g2d.fillOval(0, 0, 50, 50);
        g2d.dispose();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < 5; i++) {
            g.drawImage(buffer, i * 60, i * 60, null);
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.add(new BufferedImageDrawing());
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

参数化绘图方法实现灵活重复

创建可配置的绘图方法,通过不同参数实现多样化重复:

java如何重复画图

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

public class ParametricDrawing extends JPanel {
    private void drawPattern(Graphics g, int x, int y, int size, Color color) {
        g.setColor(color);
        g.fillOval(x, y, size, size);
        g.setColor(Color.BLACK);
        g.drawOval(x, y, size, size);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (int i = 0; i < 8; i++) {
            drawPattern(g, i * 40, i * 20, 30 + i * 5, 
                       new Color(100 + i * 20, 50 + i * 10, 150));
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.add(new ParametricDrawing());
        frame.setSize(400, 250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

标签: 画图java
分享给朋友:

相关文章

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java中如何获取当前时间

java中如何获取当前时间

获取当前时间的几种方法 使用 java.time 包(Java 8及以上推荐) import java.time.LocalDateTime; LocalDateTime currentTime =…

java实现vue接口

java实现vue接口

Java 实现 Vue 接口的方法 在 Java 中实现 Vue 前端调用的接口,通常需要使用 Spring Boot 框架构建 RESTful API。以下是具体的实现步骤和代码示例。 创建 Sp…

vue3实现画图

vue3实现画图

Vue3 实现画图功能 在 Vue3 中实现画图功能可以通过以下几种方式完成,具体选择取决于需求复杂度。 使用 HTML5 Canvas Canvas 是 HTML5 提供的原生画图 API,适合需…

java实现php

java实现php

Java 实现 PHP 功能的方法 在 Java 中实现 PHP 的功能通常涉及以下几个方面:字符串处理、Web 开发、数据库操作等。以下是几种常见需求的实现方法。 字符串处理 PHP 中的字符串处…

js实现画图工具

js实现画图工具

实现基础画布 使用HTML5的Canvas元素作为画布基础,通过JavaScript获取画布上下文。示例代码初始化一个全屏画布: <canvas id="drawingCanvas" widt…