当前位置:首页 > Java

java如何重复画图

2026-03-23 18:51:18Java

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

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

java如何重复画图

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可以实现周期性重绘,形成动态重复绘图效果:

java如何重复画图

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);
    }
}

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

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

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中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

如何运行java程序

如何运行java程序

编写Java代码 创建一个以.java为扩展名的文件,例如HelloWorld.java。文件内容需包含一个类定义,类名必须与文件名一致。例如: public class HelloWorld {…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…

如何安装java运行环境

如何安装java运行环境

下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本进行下载。Windows用户通常选择.exe安装包,macOS用户选择.dmg,Linu…

java如何取绝对值

java如何取绝对值

取绝对值的方法 在Java中,取绝对值可以通过以下几种方式实现: 使用Math.abs()方法 Math.abs()是Java中最常用的取绝对值方法,适用于多种数据类型: int abso…