Java绘图-第19章

Java绘图-第19章

1.Java绘图类

1.1Graphics类

Graphics类是用于绘制图形的抽象类,它是java.awt包中的一部分。Graphics类提供了各种方法,可以在图形上绘制各种形状、文本和图像。这些方法包括画线、画矩形、画椭圆、画弧、绘制图像等。

1.2Graphics2D类

Graphics2D类是java.awt包中的一个子类,它扩展了Graphics类,提供了更多的绘图功能和灵活性。Graphics2D类支持更高级的绘图操作,包括渐变、缩放、旋转等。它是Java 2D API 的一部分,用于在二维平面上执行各种图形操作。

以下是一些Graphics2D类中常用的方法:

  1. 设置颜色:

    void setColor(Color c)
    
  2. 设置渐变:

    void setPaint(GradientPaint paint)
    
  3. 设置线条宽度:

    void setStroke(Stroke s)
    
  4. 绘制直线:

    void drawLine(int x1, int y1, int x2, int y2)
    
  5. 绘制形状:

    void draw(Shape s)
    
  6. 填充形状:

    void fill(Shape s)
    
  7. 设置字体:

    void setFont(Font font)
    
  8. 绘制字符串:

    void drawString(String str, int x, int y)
    
  9. 绘制图像:

    boolean drawImage(Image img, int x, int y, ImageObserver observer)
    
  10. 旋转:

    void rotate(double theta, double x, double y)
    
  11. 缩放:

    void scale(double sx, double sy)
    
  12. 平移:

    void translate(double tx, double ty)
    

使用Graphics2D类的示例可以嵌入在paintComponent方法中,例如:

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JPanel;

public class MyPanel extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        // 设置抗锯齿
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // 绘制直线
        g2d.drawLine(10, 10, 100, 100);

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

        // 绘制矩形
        g2d.drawRect(120, 10, 80, 50);

        // 设置渐变
        GradientPaint gradient = new GradientPaint(200, 10, Color.RED, 300, 60, Color.YELLOW);
        g2d.setPaint(gradient);

        // 填充椭圆
        g2d.fillOval(220, 10, 100, 60);
    }
}

在这个示例中,我们创建了一个Graphics2D对象,启用了抗锯齿,并使用了一些Graphics2D的方法来绘制直线、矩形和填充椭圆。这只是Graphics2D类的一小部分功能,你可以根据需要探索更多的方法来满足你的绘图需求。

例题1-7

1.绘制奥运五环在这里插入图片描述

2.绘制实心与空心的集合图形

在这里插入图片描述

3.在窗体中显示图片

在这里插入图片描述

4.通过滑动条改变图片大小

在这里插入图片描述

5.翻转图片

在这里插入图片描述

6.让图片围绕左上角点旋转

在这里插入图片描述

7.让照片变成向左倾斜的平行四边形形状

在这里插入图片描述

8.绘制文字钟表
在这里插入图片描述

1-7例题代码汇总
package nineteen;

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


public class DrawCircle extends JFrame {
    private final int OVAL_WIDTH=80;
    private final int OVAL_HEIGHT=80;

    public DrawCircle(){
        initialize();
    }
    private void initialize(){
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new DrawPanel());
        setTitle("绘图实例1");
    }
    class DrawPanel extends JPanel{
        public void paint(Graphics g){
            g.drawOval(10,10,OVAL_WIDTH,OVAL_HEIGHT);
            g.drawOval(80,10,OVAL_WIDTH,OVAL_HEIGHT);
            g.drawOval(150,10,OVAL_WIDTH,OVAL_HEIGHT);
            g.drawOval(50,70,OVAL_WIDTH,OVAL_HEIGHT);
            g.drawOval(120,70,OVAL_WIDTH,OVAL_HEIGHT);
        }
    }
    public static void main(String[] args){
        new DrawCircle().setVisible(true);
    }
}


package nineteen;

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

public class DrawFrame extends JFrame {
    public DrawFrame(){
        setTitle("绘图实例2");
        setSize(300,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new CanvasPanel());
    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g){
            Graphics2D g2 = (Graphics2D) g;
            Shape[] shapes = new Shape[4];
            shapes[0] = new Ellipse2D.Double(5,5,100,100);
            shapes[1] = new Rectangle2D.Double(110,5,100,100);
            shapes[2] = new Rectangle2D.Double(15,15,80,80);
            shapes[3] = new Ellipse2D.Double(120,15,80,80);
            for(Shape shape:shapes){
                Rectangle2D bounds = shape.getBounds2D();
                if(bounds.getWidth()==80) {
                    g2.fill(shape);
                    g.setColor(Color.BLUE);
                }else g2.draw(shape);
            }

        }
    }
    public static void main(String[] args){
        new DrawFrame().setVisible(true);
    }
}

package nineteen;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class DrawImage extends JFrame{
    Image img;
public DrawImage(){
    try{
        img= ImageIO.read(new File("src/20220909223037.png"));
    }catch(IOException e){
        e.printStackTrace();
    }
    setSize(440,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(new CanvasPanel());
    setTitle("繪製圖片");
}
class CanvasPanel extends JPanel{
    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        g2.drawImage(img,0,0,this);

    }
}
public static void main(String[] args){
    new DrawImage().setVisible(true);
}
}

package nineteen;

import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;

public class ImageZoom extends JFrame {
    Image img;
    private int imgWidth,imgHeight;
    private JSlider jSlider;
    public ImageZoom() {
        try {
            img=ImageIO.read(new File("src/20220909223037.png"));//读取图片文件
        }catch (IOException e) {
            e.printStackTrace();
        }
        CanvasPanel canvas =new CanvasPanel();
        jSlider = new JSlider();
        jSlider.setMaximum(1000);
        jSlider.setValue(100);
        jSlider.setMaximum(1);
        jSlider.addChangeListener(new ChangeListener(){
            public void stateChanged(ChangeEvent e) {
                canvas.repaint();
            }
        });
        JPanel center =new JPanel();
        center.setLayout(new BorderLayout());
        center.add(jSlider,BorderLayout.SOUTH);
        center.add(canvas,BorderLayout.CENTER);
        setContentPane(center);
        setBounds(100,100,800,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("绘制图片");
    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g) {
            int newW=0,newH =0;
            imgWidth =img.getWidth(this);
            imgHeight =img.getHeight(this);
            float value =jSlider.getValue();
            newW =(int)(imgWidth*value/10);
            newH =(int)(imgHeight*value/10);
            g.drawImage(img, 0, 0, newW, newH, this );
        }	}
    public static void main(String[] args) {
        new ImageZoom().setVisible(true);
    }}

package nineteen;

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

import javax.imageio.*;
public class PartImage extends JFrame {
    private Image img;
    private int dx1,dy1,dx2,dy2;
    private int sx1,sy1,sx2,sy2;
    private int width=1920,height =1080;
    private JButton vBtn=null;
    private JButton hBtn=null;
    private CanvasPanel canvasPanel =null;
    public PartImage() {
        try {
            img=ImageIO.read(new File("src/20220909223037.png"));//读取图片文件
        }catch (IOException e) {
            e.printStackTrace();
        }
        dx2 =sx2 =width;
        dy2 =sy2= height;
        vBtn =new JButton("垂直");
        hBtn =new JButton("水平");

        JPanel bottom=new JPanel();
        bottom.add(hBtn);
        bottom.add(vBtn);

        Container c=getContentPane();
        c.add(bottom,BorderLayout.SOUTH);
        canvasPanel =new CanvasPanel();
        c.add(canvasPanel,BorderLayout.CENTER);

        addListener();

        setBounds(400,400,600,560);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("图片翻转");
    }
    private void addListener() {
        vBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sy1=Math.abs(sy1-height);
                sy2=Math.abs(sy2-height);
                canvasPanel.repaint();
            }
        });
        hBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sx1=Math.abs(sx1-width);
                sx2=Math.abs(sx2-width);
                canvasPanel.repaint();
            }
        });
    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g) {
            g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);//绘制指定大小
        }}
    public static void main(String[] args) {
        new PartImage().setVisible(true);
    }}
package nineteen;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class RotateImage extends JFrame {
    private Image img;
    public RotateImage(){
        try{
            img = ImageIO.read(new File("src/20220909223037.png"));
        }catch (IOException e){
            e.printStackTrace();
        }
        setBounds(100,100,400,350);
        add(new  CanvasPanel());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("图片旋转");

    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g){
            Graphics2D g2 = (Graphics2D) g;
            g2.rotate(Math.toRadians(5));
            g2.drawImage(img,70,10,300,200,this);
            g2.rotate(Math.toRadians(5));
            g2.drawImage(img,70,10,300,200,this);
            g2.rotate(Math.toRadians(5));
            g2.drawImage(img,70,10,300,200,this);
        }
    }
    public static void main(String[] args){
        new RotateImage().setVisible(true);
    }
}
package nineteen;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class TiltImage extends JFrame {
    private Image img;
    public TiltImage(){
        try{
            img = ImageIO.read(new File("src/20220909223037.png"));
        }catch(IOException e){
            e.printStackTrace();
        }
        setBounds(100,100,400,300);
        add(new CanvasPanel());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("图片倾斜");
    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D)g;
        g2.shear(0.3,0);
        g2.drawImage(img,0,0,300,200,this);
    }
}
public static void main(String[] args){
    new TiltImage().setVisible(true);
}
}

package nineteen;

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;

public class DrawString extends JFrame {
    public DrawString(){
        setSize(230,140);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new CanvasPanel());
        setTitle("绘图文本");
    }
    class CanvasPanel extends JPanel{
        public void paint(Graphics g){
            Graphics2D g2=(Graphics2D) g;
            Rectangle2D rect = new Rectangle2D.Double(10,10,200,80);
            Font font= new Font("宋体",Font.BOLD,16);
            Date date = new Date();
            g2.setColor(Color.CYAN);
            g2.fill(rect);
            g2.setColor(Color.BLUE);
            g2.setFont(font);
            g2.drawString(String.format("%tr",date),50,60);
        }
    }
    public static void main(String[] args){
        new DrawString().setVisible(true);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/149927.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0到0.01入门 Webpack| 001.精选 Webpack面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

算法--搜索与图

这里写目录标题 主要内容DFS思想 BFS思想 DFS与BFS的比较一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 主要内容 DFS 思想 会优先向深处搜索 一旦到达最深处 那么会回溯 但是在回溯的过程中 会边回溯边观察是否有能继…

2023年 华为杯数学建模 E题

本科大三的时候,打过一次美赛,当时租了一个民宿,和队友一起度过了专注的四天。当时比赛结束之后,拿着手机,看到四天没回的消息,四天没刷过的朋友圈,有种很新奇的感觉,谢谢美赛给了我…

Valgrind——程序分析工具

目录 Valgrind一.摘要二.安装Valgrind三,简单上手和分析程序1(C程序):使用未初始化的内存程序2(C程序):在内存被释放后进行读/写程序3(C程序): 内存泄露程序4(C程序): 不匹配使用malloc free 和 new delete程序5(C程序): 两次释放内存 四.Qt中使用Valgrind五.内存泄露分析 Valg…

KTV如何创新?VR全景打造KTV趣味互动新体验

我们都知道传统的平面静态图都是可以进行滤镜美化的,因此大部分用户无法在手机上分辨出商家发布的信息是否真实。由此就造成很多人在网上订购了KTV包间,实地一看却是小破旧,大呼上当了,那么VR全景KTV的应用展示方式,又…

C嘎嘎模板

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是模板,并且能熟练运用函数模…

拦截器与过滤器的区别

优质博文:IT-BLOG-CN 拦截器Interceptor和过滤器Filter都是基于AOP(Aspect Oriented Programming,面向切面编程)思想实现的,用来解决项目中某一类问题的两种“工具”,两者在使用上有时候可能会分不清&…

【MySQL】表的增删改查(基础)

一、新增(Create) 先创建一张表: create table student (id int,sn int comment 学号,name varchar(20),email varchar(20));1.1 单行数据 全列插入 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致 insert i…

4、智能家居框架设计和代码文件工程建立

目录 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 SourceInsight创建新工程步骤 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 创建一个名为si的文件夹用于保存SourceInsight生成的文件信息,然后在SourceInsig…

【软考篇】中级软件设计师 第四部分(一)

中级软件设计师 第四部分(一) 二十九. 程序设计语言概述29.1 解释、编译29.3 编译程序29.4 后缀式29.5 文法定义29.6 正规式29.7 有限自动机29.8 语法分析方法 三十. 法律法规30.1 作品所属权30.2 商标有效期30.3 职务作品所属权30.4 单位与委托30.5 商标…

Redis:详解5大数据类型及其常用命令

目录 Redis键(key)字符串(String)简介常用命令数据结构简介常用命令 列表(List)简介常用命令数据结构 集合(Set)简介常用命令数据结构 哈希(Hash)简介常用命令…

基于安卓android微信小程序的装修家装小程序

项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系…

SOLIDWORKS Flow Simulation阀门内流体仿真

Flow Simulation 导读 阀门作为输送系统中的控制设备其主要功能是接通管路中的流体介质,又或是调节流体的流量、压力等,在阀门的设计中,流量系数Cv,Kv,以及流阻系数都是基本参数,本节将讲解通过SOLIDWORKS Flow Simulation在三维…

lxml基本使用

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高 XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文…

Netty实战专栏 | NIO详解

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Netty实战专栏 ✨特色专栏&#xff1a…

C语言之深入指针(二)(详细教程)

C语言之深入指针 文章目录 C语言之深入指针1. 传值调用和传址调用2. 数组名的理解3. 使用指针访问数组3. ⼀维数组传参的本质 1. 传值调用和传址调用 写一个函数用来交换a b的值 传值调用&#xff1a; #include <stdio.h> void Swap1(int x, int y) {int tmp 0;tmp x;…

第十八章 Swing程序设计

Swing用于开发桌面窗体程序&#xff0c;是JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大、性能更加优良。但因为Swing技术推出时间太早&#xff0c;其性能、开发效率等不及一些其他流行技术&#xff0c;所以目前市场上大多数桌面窗体程序都不是由Java开发…

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…

12-使用vue2实现todolist待办事项

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…
最新文章