当前位置: 首页 > news >正文

第十九章总结:Java绘图

19.1:Java绘图类


19.2:绘制图形
package nineteentn;
import java.awt.*;
import javax.swing.*;
 
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); // 绘制第1个圆形
            g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第2个圆形
            g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第3个圆形
            g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第4个圆形
            g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT); // 绘制第5个圆形
        }
    }
 
    public static void main(String[] args) {
        new DrawCircle().setVisible(true);
    }
}//例题19.1

 
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
 
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); // 填充图形
                else
                    g2.draw(shape); // 绘制图形
            }
        }
    }
 
    public static void main(String[] args) {
        new DrawFrame().setVisible(true);
    }
}
 
//例题19.2

19.3:绘图颜色与画笔属性
19.3.1:绘制颜色

    if (bounds.getWidth() == 80){//小的是实心的,大的是空心的
                    Color c = new Color(255,0,0);//设置颜色
                    g2.setColor(c);
                    g2.fill(shape);//填充变颜色
                    g2.fill(shape); // 填充图形
                }else {
                    Color c = new Color(0,0,255);//让线条变颜色
                    g2.setColor(c);
                    g2.draw(shape); // 绘制图形
                
                }


19.3.2:绘制画笔

19.4:绘制文本
19.4.1:设置字体

package nineteentn;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.util.Date;
import javax.swing.*;
 
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);
            g2.setColor(Color.CYAN); // 设置当前绘图颜色
            g2.fill(rect); // 填充矩形
            Font font = new Font("宋体", Font.BOLD, 16);//创建字体
            Date date = new Date();
            g2.setColor(Color.BLUE); // 设置当前绘图颜色
            g2.setFont(font); // 设置字体
            g2.drawString("现在时间是", 20, 30); // 绘制文本
            g2.drawString(String.format("%tr", date), 50, 60); // 绘制时间文本
        }
    }
 
    public static void main(String[] args) {
        new DrawString().setVisible(true);
    }
}
//例题19.3

PLAIN:正常文字

BOLD:加粗

ITALIC:斜体

19.4.2:显示文字

package nineteentn;
 
 
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class DrawImage extends JFrame {
    Image img;// 展示的图片
 
    public DrawImage() {
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        setSize(800, 800); // 设置窗体大小
        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); // 显示图片,图片,x,y轴,重新绘制时通知哪个对象
        }
    }
 
    public static void main(String[] args) {
        new DrawImage().setVisible(true);
    }
}//例题19.4

19.5:显示图片
package nineteentn;
 
 
import java.awt.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
 
public class DrawImage extends JFrame {
    Image img;// 展示的图片
 
    public DrawImage() {
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        setSize(800, 800); // 设置窗体大小
        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); // 显示图片,图片,x,y轴,重新绘制时通知哪个对象
        }
    }
 
    public static void main(String[] args) {
        new DrawImage().setVisible(true);
    }
}//例题19.4

19.6:图像处理
19.6.1:放大和缩小

package nineteentn;
 
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/img.jpg"));// 读取图片文件
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        CanvasPanel canvas = new CanvasPanel();
        jSlider = new JSlider();
        jSlider.setMaximum(1000);//滚动条
        jSlider.setValue(100);
        jSlider.setMinimum(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 / 100);// 计算图片放大后的宽度
            newH = (int) (imgHeight * value / 100);// 计算图片放大后的高度
            g.drawImage(img, 0, 0, newW, newH, this);// 绘制指定大小的图片
        }
    }
 
    public static void main(String[] args) {
        new ImageZoom().setVisible(true);
    }
}//例题19.5

19.6.2:图像翻转

package nineteentn;
 
 
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;
 
public class PartImage extends JFrame {
    private Image img;
    private int dx1, dy1, dx2, dy2;//定义图像坐标
    private int sx1, sy1, sx2, sy2;//定义图像坐标
    private int width = 800, height = 888;// 图片宽高
    private JButton vBtn = null;// 垂直翻转按钮
    private JButton hBtn = null;// 水平翻转按钮
    private CanvasPanel canvasPanel = null;
 
    public PartImage() {
 
        try {
            img = ImageIO.read(new File("src/img.jpg"));// 读取图片文件
        } 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(100, 100, 800, 600); // 设置窗体大小和位置
        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);
    }
}//例题19.6

 水平翻转

 垂直翻转

相关文章:

第十九章总结:Java绘图

19.1:Java绘图类 19.2:绘制图形 package nineteentn; import java.awt.*; import javax.swing.*; public class DrawCircle extends JFrame { private final int OVAL_WIDTH 80; // 圆形的宽 private final int OVAL_HEIGHT 80; // 圆形的高…...

Mybatis-Plus条件构造器QueryWrapper

Mybatis-Plus条件构造器QueryWrapper 1、条件构造器关系介绍 介绍 : 上图绿色框为抽象类 蓝色框为正常类,可创建对象 黄色箭头指向为父子类关系,箭头指向为父类 wapper介绍 : Wrapper : 条件构造抽象类&#xff0…...

python解析wirshark抓包数据

因为工作需要,需要分析wirshark的抓包数据。数据有的是在比特位中。不方便查找。而lua语言又不愿意去学,所以用python解析后,输出日志。帮助分析.1.tcp分析 from dpkt.tcp import TCP from scapy.all import * from datetime import datetim…...

一个用于操作Excel文件的.NET开源库

推荐一个高性能、跨平台的操作Excel文件的.NET开源库。 01 项目简介 ClosedXML是一个.NET第三方开源库,支持读取、操作和写入Excel 2007 (.xlsx, .xlsm)文件,是基于OpenXML封装的,让开发人员无需了解OpenXML API底层API&#xf…...

Web APIs——正则表达式使用

1、什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 1.1 正则表达式使用场景 例如…...

文件包含学习笔记总结

文件包含概述 ​ 程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。 ​ 程…...

<C++> 优先级队列

目录 前言 一、priority_queue的使用 1. 成员函数 2. 例题 二、仿函数 三、模拟实现 1. 迭代器区间构造函数 && AdjustDown 2. pop 3. push && AdjustUp 4. top 5. size 6. empty 四、完整实现 总结 前言 优先级队列以及前面的双端队列基本上已经脱离了队列定…...

systemverilog:interface中的modport用法

使用modport可以将interface中的信号分组并指定方向,方向是从modport连接的模块看过来的。简单示例如下: interface cnt_if (input bit clk);logic rstn;logic load_en;logic [3:0] load;logic [7:0] count;modport TEST (input clk, count,output rst…...

VR建筑仿真场景编辑软件有助于激发创作者的灵感和创造力

随着VR虚拟现实技术的不断发展和普及,VR虚拟场景编辑器逐渐成为了VR场景开发重要工具。它对于丰富和完善VR虚拟现实内容的创建和呈现具有重要的意义,为我们的工作和教学带来了许多变化和可能性。 首先,VR虚拟场景编辑器对于提升用户体验具有重…...

8.查询数据

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

VB.NET—Bug调试(参数话查询、附近语法错误)

目录 前言: BUG是什么&#xff01; 事情的经过: 过程: 错误一: 错误二: 总结: 前言: BUG是什么&#xff01; 在计算机科学中&#xff0c;BUG是指程序中的错误或缺陷&#xff0c;它通过是值代码中的错误、逻辑错误、语法错误、运行时错误等相关问题&#xff0c;这些问题…...

武汉凯迪正大—锂电池均衡维护仪

产品概况 KDZD885C 电池容量平衡测试系统&#xff0c;主要用于锂电池箱充放电测试及均衡维护&#xff0c;解决锂电池包单芯电压不均衡的痛点&#xff0c;用于快速解决锂电池电压不一致的难题,适用于各锂电池模组电压等级&#xff0c;集单芯放电&#xff0c;充电&#xff0c;均…...

解决服务器中的mysql连接不上Navicat的问题脚本

shell标本&#xff0c;快速解决服务器中的mysql连接不上Navicat的问题 在Linux服务器开发中&#xff0c;mysql的配置文件一般是只允许本地连接 所以想用Navicat进行连接&#xff0c;就需要修改配置和mysql中用户访问表的权限 为了方便&#xff0c;写成了shell脚本 #!/bin/bas…...

Git Flow的简单使用

目录 系列文章目录 一、新建feture下的分支 二、合并分支且删除当前分支 注意&#xff1a;这两个命令都得是在develop分支下进行 一、新建feture下的分支 xxx为自己命名的分支 git flow feature start xxx 二、合并分支且删除当前分支 需要先提交一下当前分支的代码&…...

LOWORD, HIWORD, LOBYTE, HIBYTE的解释

文章目录 实验结论 实验 int 类型大小正常为4Byte 以小端序来看 0x12345678在内存中的存储为 0x78 0x56 0x34 0x120x78在低地址&#xff0c;0x12在高地址 程序输出 #include <stdio.h> #include <string.h> #include<windows.h>int main() {int a 0x12345…...

Centos7.9用rancher来快速部署K8S

什么是 Rancher&#xff1f; Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群&#xff0c;创建节点并安装 Kubernetes&#xff0c;或者导入在任何地方运行的现有 Kube…...

NSSCTF第12页(2)

[CSAWQual 2019]Unagi 是xxe注入&#xff0c;等找时间会专门去学一下 XML外部实体&#xff08;XXE&#xff09;注入 - 知乎 【精选】XML注入学习-CSDN博客 【精选】XML注入_xml注入例子-CSDN博客 题目描述说flag在/flag下 发现有上传点&#xff0c;上传一句话木马试试 文件…...

基于单片机的电源切换控制器设计(论文+源码)

1.系统设计 在基于单片机的电源切换控制器设计中&#xff0c;系统功能设计如下&#xff1a; &#xff08;1&#xff09;实现电源的电压检测&#xff1b; &#xff08;2&#xff09;如果电压太高&#xff0c;通过蜂鸣器进行报警提示&#xff0c;继电器进行切换&#xff0c;使…...

机器学习-特征选择:使用Lassco回归精确选择最佳特征

机器学习-特征选择:使用Lassco回归精确选择最佳特征 一、Lasso回归简介1.1 Lasso回归的基本原理1.2 Lasso回归与普通最小二乘法区别二、特征选择的方法2.1 过滤方法2.2 包装方法2.3 嵌入方法三、Lasso的特征选择流程3.1 数据预处理3.2 划分训练集和测试集3.3 搭建Lasso回归模型…...

uniapp开发ios上线(在win环境下使用三方)

苹果 1、win环境下无法使用苹果os编译器所以使用第三方上传工具&#xff0c;以下示例为 初雪云 &#xff08;单次收费&#xff0c;一元一次&#xff09; 初雪云&#xff08;注册p12证书&#xff09;&#xff1a;https://www.chuxueyun.com/#/pages/AppleCertificate 苹果开发者…...

DRM显示框架中的“导演”:深入理解CRTC如何协同Plane与Connector工作

DRM显示框架中的“导演”&#xff1a;深入理解CRTC如何协同Plane与Connector工作 想象一下&#xff0c;当你在电影院观看一部大片时&#xff0c;银幕上的每一帧画面都经过精心编排——主角的位置、特效的时机、放映机的同步&#xff0c;所有这些元素都需要一个核心指挥者来协调…...

从MATLAB到C++:手把手教你将鱼眼相机标定结果(Scaramuzza模型)部署到OpenCV项目

从MATLAB到C&#xff1a;手把手教你将鱼眼相机标定结果&#xff08;Scaramuzza模型&#xff09;部署到OpenCV项目 鱼眼相机因其超广视角在机器人导航、虚拟现实等领域应用广泛。但MATLAB标定结果如何无缝迁移到C工程环境&#xff1f;本文将彻底解决这个痛点&#xff0c;带您完成…...

UI-Grid终极样式定制指南:10个LESS变量和主题系统使用技巧

UI-Grid终极样式定制指南&#xff1a;10个LESS变量和主题系统使用技巧 【免费下载链接】ui-grid UI Grid: an Angular Data Grid 项目地址: https://gitcode.com/gh_mirrors/ui/ui-grid UI-Grid作为Angular数据表格的强大解决方案&#xff0c;提供了灵活的样式定制系统。…...

Qwen-Image-Edit-2511-Unblur-Upscale惊艳效果:模糊图片一键高清化

Qwen-Image-Edit-2511-Unblur-Upscale惊艳效果&#xff1a;模糊图片一键高清化 1. 效果展示&#xff1a;从模糊到高清的魔法 你是否遇到过这样的情况&#xff1f;手机里珍藏的老照片因为年代久远变得模糊不清&#xff0c;或是匆忙拍摄的珍贵瞬间因为手抖而糊成一片。现在&…...

技术赋能B端拓客:号码核验行业的迭代与价值升级,氪迹科技法人股东号码核验筛选,阶梯式价格

2026年&#xff0c;B端市场竞争日趋激烈&#xff0c;拓客逻辑已从“规模扩张”转向“价值深耕”&#xff0c;“精准、高效、低成本”成为所有拓客团队的核心追求。号码核验作为B端拓客的前置基础性环节&#xff0c;其服务质量直接决定线索价值、人力效能与投入回报比&#xff0…...

PyTorch 2.8镜像实操手册:Git+vim+htop+screen开发运维一体化工作流

PyTorch 2.8镜像实操手册&#xff1a;Gitvimhtopscreen开发运维一体化工作流 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像是一个为专业开发者打造的全功能工作环境&#xff0c;基于RTX 4090D 24GB显卡和CUDA 12.4进行了深度优化。这个镜像不仅预装了最新版的PyTorch框架&…...

竞赛获奖保研加分测评:除了挑战杯,哪些垂直赛事含金量更高?

在 2026 年推免&#xff08;保研&#xff09;竞争进入白热化的背景下&#xff0c;工科学子的加分项已不仅仅是绩点的博弈&#xff0c;更是工程实战能力的短兵相接。随着教育部《关于加强新时代卓越工程师培养的指导意见》的深入实施&#xff0c;各大名校对人才的评价标准正从“…...

突破百度网盘限速瓶颈:BaiduPCS-Go命令行客户端完全指南

突破百度网盘限速瓶颈&#xff1a;BaiduPCS-Go命令行客户端完全指南 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 你是否厌倦了百度网盘那令人抓狂的下载…...

Krita 5.3.0 与 6.0.0 发布:功能升级与技术革新

文本与工具革新&#xff0c;Krita 功能升级Krita 5.3.0 和 6.0.0 正式推出&#xff0c;带来了一系列显著的功能改进。文本工具被完全重写&#xff0c;支持在画布上进行所见即所得编辑&#xff0c;还能支持 OpenType 的所有特性以及文本置入形状&#xff0c;这大大提升了文字处理…...

突破3D打印障碍:SketchUp STL插件的技术革新与实践指南

突破3D打印障碍&#xff1a;SketchUp STL插件的技术革新与实践指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 当一位产品…...