【Java数字图像处理之Swing基础篇】Java绘制太极图

简介: 【Java数字图像处理之Swing基础篇】Java绘制太极图

  提起用编程语言绘制图像,大多数人想到的估计都是Python,比较Python真的简单易用,但是Java作为一门极受欢迎的语言,当然也有它的图像处理API,比如绘制这个太极图用的就是Java2D,而且Java运行速度要比Python更快

先看效果

代码

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
public class GraphicsDemo extends JFrame{
    public static void main(String[] args) {
        GraphicsDemo demo = new GraphicsDemo();
        demo.setVisible(true);//设置可见
    }
    public GraphicsDemo(){
        this.setSize(300,200);
        this.setTitle("Java绘制太极");
        JPanel panel = new JPanel(){
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//打开抗锯齿
                Shape leftCircle = new Ellipse2D.Double(10,10,300,300);
                Shape rightCircle = new Ellipse2D.Double(10,10,300,300);
                Shape innerCircle1 = new Ellipse2D.Double(85,10,150,150);
                Shape innerCircle2 = new Ellipse2D.Double(85,160,150,150);
                Shape rectAngel1 = new Rectangle2D.Double(160,10,150,300);
                Shape rectAngel2 = new Rectangle2D.Double(10,10,150,300);
                Area left = new Area(leftCircle);
                Area right = new Area(rightCircle);
                Area area1 = new Area(rectAngel1);
                Area area2 = new Area(rectAngel2);
                left.subtract(area1);
                right.subtract(area2);
                Area inner1 = new Area(innerCircle1);
                Area inner2 = new Area(innerCircle2);
                left.add(inner1);
                right.add(inner2);
                right.subtract(inner1);
                Shape minorWhiteCircle = new Ellipse2D.Double(150,70,20,20);
                Shape minorBlackCircle = new Ellipse2D.Double(150,230,20,20);
                g2.setPaint(Color.WHITE);
                g2.fill(left);
                g2.setPaint(Color.BLACK);
                g2.fill(right);
                g2.fill(minorWhiteCircle);
                g2.setPaint(Color.WHITE);
                g2.fill(minorBlackCircle);
                g2.dispose();
            }
        };
        this.add(panel);//添加到当前
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭程序关闭,相当于System.exit
    }
}

代码解析

JavaArea对图形的布尔操作如下

  1. Uion(+):保留两个图形的重叠部分
  2. Subtraction(-):从第一个图形中减去第二个部分的重叠部分
  3. Innersection(&):只保留两个图形的重叠部分
  4. Exclusion-or(^):保留两个图形的不重叠部分

代码中区域的划分参考

       建议看着代码自己理解比较好,或者直接拿去用

相关文章
|
20天前
|
存储 Java 关系型数据库
农产品管理系统【GUI/Swing+MySQL】(Java课设)
农产品管理系统【GUI/Swing+MySQL】(Java课设)
21 1
|
20天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
23 0
|
6天前
|
设计模式 Java 开发者
Java一分钟之-Swing组件:JTable, JTree, JTextArea
本文介绍了Java Swing的三个关键组件:`JTable`、`JTree`和`JTextArea`,用于数据展示和用户输入。`JTable`展示二维数据,如表格;`JTree`展示层次结构数据,如文件系统;`JTextArea`则用于多行文本输入和显示。每个组件都提供了示例代码,并列出常见问题及避免方法,如数据源未设置、滚动面板缺失等。理解并掌握这些组件,能帮助开发者创建高效用户界面。
23 0
|
6天前
|
设计模式 Java 容器
Java一分钟之-Swing基础:JFrame, JPanel, JButton
Java Swing教程介绍了构建桌面应用的关键组件:JFrame(顶级容器,显示主窗口)、JPanel(组合其他组件的容器)和JButton(交互元素)。文中通过示例代码展示了这些组件的使用,并列出常见问题及解决方法,如确保设置JFrame的可见性和关闭操作,正确添加组件至JPanel,以及为JButton添加事件监听器。理解这些基础将有助于开发功能完善的GUI应用。
8 0
|
20天前
|
Java 关系型数据库 MySQL
基于swing的java物业管理系统
基于swing的java物业管理系统
23 5
|
20天前
|
Java
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)
Java Swing猜英文单词游戏(java+面向对象编程+swing+awt+io流)
|
Oracle 安全 Java
Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
Java GUI框架选择什么?Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
1102 0
|
Java Spring
[SOLVED] Caused by: java.awt.HeadlessException when trying to create a SWING/AWT frame from Sprin...
[SOLVED] Caused by: java.awt.HeadlessException when trying to create a SWING/AWT frame from Spring Boot In Spring Boot, when y...
1340 0