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 {@Overrideprotected 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.mzph.cn/news/143525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle(17)Managing Roles

目录 一、基础知识 1、基础介绍 2、Predefined Roles 预定义的角色 3、各种角色的介绍 二、基础操作 1、创建角色 2、修改用户默认role 3、回收role 4、删除role 5、为角色授权 6、授予角色给用户 7、查看用户包含的角色: 8、查看角色所包含的权限 9、…

reactive和effect,依赖收集触发依赖

通过上一篇文章已经初始化项目,集成了ts和jest。本篇实现Vue3中响应式模块里的reactive方法。 前置知识要求 如果你熟练掌握Map, Set, Proxy, Reflect,可直接跳过这部分。 Map Map是一种用于存储键值对的集合,并且能够记住键的原始插入顺…

React Virtual DOM及Diff算法

JSX到底是什么 使用React就一定会写JSX,JSX到底是什么呢?它是一种JavaScript语法的扩展,React使用它来描述用户界面长成什么样子,虽然它看起来非常像HTML,但他确实是javaScript,在React代码执行之前&#…

Kafka简单汇总

Kafka的结构图 多个Parttion共同组成这个topic的所有消息。每个consumer都属于一个consumer group,每条消息只能被consumer group中的一个Consumer消费, 但可以被多个consumer group消费。即组间数据是共享的,组内数据是竞争的。二、消费模型…

传输层协议-UDP协议

目录 传输层再谈端口号端口号范围划分认识知名端口号 UDP协议UDP协议格式UDP数据封装UDP数据分用 UDP协议的特点面向数据报 UDP缓冲区UDP使用注意事项基于UDP的应用层协议 传输层 实际上我们应用层的数据并不是直接发给网络的,而是需要先将数据发送给传输层&#xf…

指针传2

几天没有写博客了,怎么说呢?这让我总感觉缺点什么,心里空落落的,你懂吧! 好了,接下来开始我们今天的正题! 1. ⼆级指针 我们先来看看代码: 首先创建了一个整型变量a,将…

一题带你写出图论算法模板!!!

这题是道基础的图论算法题目 注释很重要!!!!!!! 在做这道题之前,我们先了解一下基础的图论算法吧!!! 1.floyd: 这样可以求出所有点…

【java学习—十四】java动态代理(6)

文章目录 1. 相关概念2. 步骤3. 举例 问题: 假设一个java项目有100个java类,每个java有10个方法,这总共有1000个方法,现在有这样一个需求,需要在每个java方法加上2句话:在方法执行前输出这个方法开始执行&a…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

【Python】Matplotlib-多张图像的显示

一&#xff0c;情景描述 大家在写论文或者实验报告的时候&#xff0c;经常会放多张图片或数据图像在一起形成对比。比如&#xff0c;我现在有一张经过椒盐噪声处理的图像&#xff0c;现在进行三种滤波&#xff0c;分别是均值&#xff0c;高斯&#xff0c;中值滤波&#xff0c;…

ElementUI表格el-table自适应高度(表头表尾固定不动)

ElementUI表格el-table自适应高度&#xff08;表头表尾固定不动&#xff09;&#xff0c;内容只在中间滚动&#xff0c;效果如图&#xff1a; 实现代码 <div class"mt-10" :style"{height:tableHeight}"><div class"operation-bar">…

VScode+python开发,多个解释器切换问题

内容&#xff1a;主要VScode使用多个解释器 环境准备 VScode编辑器&#xff0c;两个版本python解释器 python3.7.2 python3.11.6 问题&#xff1a; 目前我们的电脑安装了python3.7.2、python3.11.6两个解释器&#xff0c;在vscode编辑器中&#xff0c;无法切换解释器使用如…

【蓝桥杯软件赛 零基础备赛20周】第3周——填空题

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 文章目录 00. 2023年第14届参赛数据0. 上一周答疑1. 填空…

RequestContextHolder详解

最近遇到的问题是在service获取request和response,正常来说在service层是没有request的,然而直接从controlller传过来的话解决方法太粗暴,后来发现了SpringMVC提供的RequestContextHolder遂去分析一番,并借此对SpringMVC的结构深入了解一下,后面会再发文章详细分析源码 1.Reque…

anaconda中安装pytorch和TensorFlow环境并在不同环境中安装kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

单链表的实现

CSDN主页&#xff1a;醋溜马桶圈_C语言进阶,初始C语言,数据结构-CSDN博客 Gitee主页&#xff1a;mnxcc (mnxcc) - Gitee.com 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 目录 1.认识单链表 2.创建单链表 3.单链表的操作 3.1打印单链表 3.2开辟新空间 3.3尾插 3.4头插…

深入探讨Linux中的文本文件查看命令

目录 前言1 cat命令2 less命令3 more命令4 head命令5 tail命令6 总结 前言 在Linux系统中&#xff0c;文本文件是日常工作中不可或缺的一部分&#xff0c;无论是配置文件、日志文件还是代码文件&#xff0c;都需要用到文本文件查看命令。在本文中&#xff0c;我们将深入研究一…

AI创作系统ChatGPT源码+AI绘画系统+支持OpenAI DALL-E3文生图,可直接对话文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。新增支…

桶装水订水小程序app,线上预约订水更便捷

桶装水订水小程序app&#xff0c;线上预约订水更便捷。设置好地址&#xff0c;一键订水&#xff0c;工作人员送水到家。还能配送新鲜果蔬&#xff0c;绿色健康有保证。送水软件手机版&#xff0c;提供各种品牌桶装水&#xff0c;在线发起订水服务&#xff0c;由服务人员送水到家…

QT windows与linux之间sokcet通信中文乱码问题解决方法

QT windows与linux之间sokcet通信中文乱码问题解决方法 linux发送与接收都转码utf-8: tcpClient ->write( send_msg.toUtf8());//解决乱码&#xff0c;发送转码 接收&#xff1a; QByteArray buffer tcpClient->readAll(); if(!buffer.isEmpty()) { // ui->plain…