0

0

Java中如何画圆 详解圆形和椭圆的绘制

下次还敢

下次还敢

发布时间:2025-06-26 21:11:01

|

1089人浏览过

|

来源于php中文网

原创

java中绘制圆形和椭圆,1. 使用graphics或graphics2d类的drawoval()和filloval()方法;2. 通过设置相同width和height绘制圆形;3. 控制圆形粗细使用basicstroke类并调用setstroke()方法;4. 修改颜色使用setcolor()方法;5. 绘制虚线圆形需定义dashpattern数组并传入basicstroke构造函数;6. 动态调整大小需监听componentresized事件并重绘;7. 椭圆居中需根据窗口尺寸计算x和y坐标。

Java中如何画圆 详解圆形和椭圆的绘制

Java中绘制圆形和椭圆,主要依赖于GraphicsGraphics2D类提供的方法。核心是理解drawOval()fillOval()这两个方法,它们实际上绘制的是一个矩形的内切椭圆,当矩形是正方形时,就变成了圆形。

Java中如何画圆 详解圆形和椭圆的绘制

绘制圆形和椭圆的核心在于理解Graphics类中的drawOval(int x, int y, int width, int height)fillOval(int x, int y, int width, int height)方法。xy定义了椭圆外切矩形的左上角坐标,widthheight则定义了矩形的宽度和高度。

Java中如何画圆 详解圆形和椭圆的绘制

绘制圆形,只需要保证widthheight相等即可。

立即学习Java免费学习笔记(深入)”;

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

public class DrawCircle extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        // 绘制圆形
        int diameter = 100; // 直径
        int x = 50;
        int y = 50;
        g2d.setColor(Color.RED);
        g2d.drawOval(x, y, diameter, diameter);

        // 绘制填充圆形
        x = 200;
        g2d.setColor(Color.BLUE);
        g2d.fillOval(x, y, diameter, diameter);

        // 绘制椭圆
        int width = 150;
        int height = 75;
        x = 50;
        y = 200;
        g2d.setColor(Color.GREEN);
        g2d.drawOval(x, y, width, height);

        // 绘制填充椭圆
        x = 200;
        g2d.setColor(Color.YELLOW);
        g2d.fillOval(x, y, width, height);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Draw Circle and Oval");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new DrawCircle());
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}

如何控制圆形的粗细和颜色?

控制圆形的粗细和颜色主要通过Graphics2D类实现。Graphics2DGraphics的子类,提供了更强大的绘图功能,包括设置线条粗细(Stroke)和颜色(Color)。

Java中如何画圆 详解圆形和椭圆的绘制
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;

public class DrawCircleThickness extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        // 设置线条粗细
        Stroke stroke = new BasicStroke(5); // 5像素粗细
        g2d.setStroke(stroke);

        // 设置颜色
        g2d.setColor(Color.MAGENTA);

        // 绘制圆形
        int diameter = 100;
        int x = 50;
        int y = 50;
        g2d.drawOval(x, y, diameter, diameter);

        // 绘制填充的,带粗细边框的圆形
        g2d.setColor(Color.CYAN);
        g2d.fill(new Ellipse2D.Double(200, 50, diameter, diameter));

        // 绘制椭圆
        g2d.setColor(Color.ORANGE);
        int width = 150;
        int height = 75;
        x = 50;
        y = 200;
        g2d.drawOval(x, y, width, height);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Draw Circle with Thickness");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new DrawCircleThickness());
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}

这段代码展示了如何使用BasicStroke来设置线条的粗细,以及如何使用setColor来改变颜色。 注意这里使用了Ellipse2D.Double来创建椭圆,然后使用g2d.fill()来填充,可以更灵活地控制填充效果。

墨狐AI
墨狐AI

5分钟生成万字小说,人人都是小说家!

下载

如何绘制虚线圆形?

绘制虚线圆形同样需要使用Graphics2D类,关键在于使用BasicStroke的构造函数来定义虚线的样式。BasicStroke允许你指定虚线的线段长度、间隔长度等参数。

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

public class DrawDashedCircle extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        // 定义虚线样式
        float[] dashPattern = {10, 5, 2, 5}; // 实线长度10,间隔5,实线2,间隔5
        BasicStroke dashedStroke = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dashPattern, 0.0f);
        g2d.setStroke(dashedStroke);

        // 设置颜色
        g2d.setColor(Color.DARK_GRAY);

        // 绘制虚线圆形
        int diameter = 100;
        int x = 50;
        int y = 50;
        g2d.drawOval(x, y, diameter, diameter);

        // 绘制虚线椭圆
        int width = 150;
        int height = 75;
        x = 200;
        y = 50;
        g2d.draw(new Ellipse2D.Double(x, y, width, height));
    }

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

这里,dashPattern数组定义了虚线的样式。数组中的值交替表示实线段的长度和空白段的长度。BasicStroke的构造函数使用这个数组来创建虚线笔触。

如何在Java Swing中创建一个可以动态调整大小的圆形?

创建一个可以动态调整大小的圆形,需要监听组件的大小改变事件,并根据新的尺寸重新计算圆形的位置和大小。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

public class ResizableCircle extends JPanel {

    private int diameter;
    private int x;
    private int y;

    public ResizableCircle() {
        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                // 组件大小改变时,重新计算圆形的大小和位置
                int width = getWidth();
                int height = getHeight();
                diameter = Math.min(width, height) - 20; // 留出一些边距
                x = (width - diameter) / 2;
                y = (height - diameter) / 2;
                repaint(); // 重新绘制
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        // 设置颜色
        g2d.setColor(Color.GREEN);

        // 绘制圆形
        g2d.drawOval(x, y, diameter, diameter);
    }

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

这段代码的关键在于ComponentAdapter的使用。componentResized方法会在组件大小改变时被调用,我们在这个方法中重新计算圆形的大小和位置,并调用repaint()方法来触发重绘。 Math.min(width, height)确保圆形始终位于组件的内部,并且是适应最小尺寸的正方形。

绘制椭圆时,如何让椭圆始终保持在窗口中心?

要使椭圆始终保持在窗口中心,需要根据窗口的大小动态计算椭圆的坐标。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

public class CenteredOval extends JPanel {

    private int width;
    private int height;
    private int x;
    private int y;

    public CenteredOval() {
        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                // 组件大小改变时,重新计算椭圆的位置
                int panelWidth = getWidth();
                int panelHeight = getHeight();

                // 椭圆的宽度和高度可以固定,也可以根据窗口大小动态调整
                width = panelWidth / 3;  // 宽度为窗口的1/3
                height = panelHeight / 4; // 高度为窗口的1/4

                x = (panelWidth - width) / 2;
                y = (panelHeight - height) / 2;
                repaint(); // 重新绘制
            }
        });
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        // 设置颜色
        g2d.setColor(Color.BLUE);

        // 绘制椭圆
        g2d.drawOval(x, y, width, height);
    }

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

关键在于componentResized方法中,我们获取了面板的宽度和高度,然后计算出椭圆的左上角坐标,使其位于面板的中心。 椭圆的宽度和高度可以根据需求进行调整,这里设置为面板宽度和高度的1/3和1/4,确保椭圆不会超出窗口边界。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

844

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

740

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

400

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.8万人学习

C# 教程
C# 教程

共94课时 | 7.3万人学习

Java 教程
Java 教程

共578课时 | 49.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号