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.rhkb.cn/news/193088.html

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

相关文章

Android修行手册 - 阴影效果的几种实现以及一些特别注意点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC 👉关于作者 专…

3D造型渲染软件DAZ Studio mac中文版介绍

DAZ Studio mac是一款3D造型和渲染软件,由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境,让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…

8.查询数据

一、单表查询 MySQL从数据表中查询数据的基本语为SELECT语。SELECT语的基本格式是: SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator>…

032-从零搭建微服务-定时服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

C语言不可不敲系列:跳水比赛排名问题

目录 1题干&#xff1a; 2解题思路&#xff1a; 3代码: 4运行结果: 5总结: 1题干&#xff1a; 5位运动员参加了10米台跳水比赛&#xff0c;有人让他们预测比赛结果 A选手说&#xff1a;B第二&#xff0c;我第三&#xff1b; B选手说&#xff1a;我第二&#xff0c;E第四&am…

十九章总结

Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;封装了Java支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔 Graphics2D类 Graphics2D类继承Graphics类实现功能更加强大的绘图操作集合 绘制图形 在项目中创建一个类&#xff0c;是该…

nginx安装搭建

下载 免费开源版的官方网站&#xff1a;nginx news Nginx 有 Windows 版本和 Linux 版本&#xff0c;但更推荐在 Linux 下使用 Nginx&#xff1b; 下载nginx-1.14.2.tar.gz的源代码文件&#xff1a;wget http://nginx.org/download/nginx-1.14.2.tar.gz 我的习惯&#xff0…

【Linux进阶之路】一文吃透文件

前言 先来谈一下文件的共识 文件 内容 属性。 解释&#xff1a;文件在创建时就有基本属性&#xff0c;比如权限&#xff0c;文件名&#xff0c;文件的创建时间等基本信息。文件分为打开的文件与未被打开的文件。 解释&#xff1a;打开的文件由操作系统进行管理。未打开的文件…

JZ22:链表中倒数第k个结点

JZ22&#xff1a;链表中倒数第k个结点 题目描述&#xff1a; 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 示例1 输入&#xff1a; 1,{1,2,3,4,5} 返回值&#xff1a; {5} 分析&#xff1a; 快慢指针思想&#xff1a; 需要两个指针&#xff0c;快指针fast&…

云课五分钟-03第一个开源游戏复现-贪吃蛇

前篇 云课五分钟-02第一个代码复现-终端甜甜圈C 视频 云课五分钟-03第一个开源游戏复现-贪吃蛇 一个终端的动态字符显然很难调动编程的积极性&#xff0c;那么更有趣的开源的游戏也许是一种更好的启发。 文本 蓝桥ROS机器人之绚丽贪吃蛇 如何在Linux下使用 DungeonRush-mast…

【java学习—十四】反射机制调用指定方法、指定属性(5)

文章目录 1. 调用指定方法2. 调用指定属性 1. 调用指定方法 通过反射&#xff0c;调用类中的方法&#xff0c;通过 Method 类完成。步骤&#xff1a;     ①通过 Class 类的 getMethod(String name,Class...parameterTypes) 方法取得一个 Method 对象&#xff0c;并设置此…

C#使用时序数据库 InfluxDB

一、安装 https://docs.influxdata.com/influxdb/v2/install/?tWindows 解压后使用cmd运行 访问 localhost:8086 配置 第一次登入会初始化 配置登入账号 保存TOKEN 这个TOKEN用于后期代码链接访问数据库&#xff0c;忘记了只能删除重新生成 点击QUCK START进入管理页面 …

【vue实战项目】通用管理系统:api封装、404页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…

Android抓包工具—Fiddler详解

前言 平时和其他大佬交流时&#xff0c;总会出现这么些话&#xff0c;“抓个包看看就知道哪出问题了”&#xff0c;“抓流量啊&#xff0c;payload都在里面”&#xff0c;“这数据流怎么这么奇怪”。 &#x1f449;这里出现的名词&#xff0c;其实都是差不多的意思啊&#xf…

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

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

PyCharm 安装库时显示连接超时

在setting->python Interpreter 中用“” 安装库时&#xff0c;出现一个弹窗&#xff0c;提示信息如下&#xff1a; Error updating package list: Connect timed out 通过查阅资料&#xff0c;发现是镜像源的问题&#xff0c;具体的解决方案如下&#xff1a; 1. 更新一下…

电源电压范 围宽、功耗小、抗干扰能力强的国产芯片GS069适用于电动工具等产品中,采用SOP8的封装形式封装

GS069电动工具直流调速电路是CMOS专用集成电路&#xff0c;具有电源电压范 围宽、功耗小、抗干扰能力强等特点。通过外接电阻网络&#xff0c;改变与之相接 的VMOS 管的输出&#xff0c;达到控制电动工具转速的作用。该电路输出幅值宽&#xff0c; 频率变化小&#xff0c;占空比…

云原生下GIS服务规划与设计

作者&#xff1a;lisong 目录 背景云原生环境下GIS服务的相关概念GIS服务在云原生环境下的规划调度策略GIS服务在云原生环境下的调度手段GIS服务在云原生环境下的服务规划调度实践 背景 作为云原生GIS系统管理人员&#xff0c;在面对新建的云GIS系统时&#xff0c;通常需要应对…

2023-2024-2 高级语言程序设计-二维数组

7-1 矩阵运算 给定一个nn的方阵&#xff0c;本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。 输入格式: 输入第一行给出正整数n&#xff08;1<n≤10&#xff09;&#xff1b;随后n行&#xff0c;每行给出…

uniapp——项目day05

购物车页面 结算区域 把结算区域封装为组件 1. 在 components 目录中&#xff0c;新建 my-settle 结算组件&#xff1a; 2. 初始化 my-settle 组件的基本结构和样式&#xff1a; <template><view class"my-settle-container">结算组件</view> …