swing快速入门(二十五)

注释很详细,直接上代码

新增内容

1.ImageIO.write读取并显示图片

2.ImageIO.writeImageIO.write读取并保存图片

package swing21_30;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class swing_test_23 {private Frame frame=new Frame("swing_test_23");MenuBar menuBar=new MenuBar();Menu menu=new Menu("文件");MenuItem open=new MenuItem("打开");MenuItem save=new MenuItem("另存为");//声明BufferedImage对象,记录本地图片BufferedImage image;private class MyCanvas extends Canvas{@Overridepublic void paint(Graphics g){g.drawImage(image,0,0,null);}}MyCanvas drawArea=new MyCanvas();public void init() throws Exception{//组装视图open.addActionListener(e -> {//打开文件FileDialog fileDialog=new FileDialog(frame,"打开图片",FileDialog.LOAD);fileDialog.setVisible(true);//获取用户选择的图片路径以及名称String dir=fileDialog.getDirectory();String filename=fileDialog.getFile();try{image= ImageIO.read(new File(dir+filename));drawArea.repaint();} catch (IOException ex) {throw new RuntimeException(ex);}});save.addActionListener(e->{//展示一个文件对话框FileDialog fileDialog=new FileDialog(frame,"保存图片",FileDialog.SAVE);fileDialog.setVisible(true);//获取用户设置的保存路径和文件名称String dir=fileDialog.getDirectory();String filename=fileDialog.getFile();try{ImageIO.write(image,"JPEG",new File(dir,filename));}catch (IOException ex){ex.printStackTrace();}});// 设置窗口大小frame.setBounds(200,200,740,508);// 显示窗口frame.setVisible(true);// 关闭窗口时退出程序frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});// 菜单栏menu.add(open);menu.add(save);menuBar.add(menu);//把菜单条目添加到菜单栏中frame.setMenuBar(menuBar);frame.add(drawArea);//把画布添加到窗口中frame.setBounds(200,200,740,508);frame.setVisible(true);}public static void main(String[] args) {//直接运行inittry {new swing_test_23().init();} catch (Exception e) {throw new RuntimeException(e);}}
}

运行效果

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用web_video_server进行网页段的视频传输

引言:在项目中,需要实现无人机摄像头采集到的图像回传到window下进行查看,为此,选择使用web_video_server功能包实现局域网下的图像传输 硬件环境: 硬件:Jetson orin nano 8G D435摄像头 环境&#xff…

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述: 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息,包括&…

2024年pmp考试还有多久啊?怎么备考?

一般来说每年3、6、9、12月考试,一年四次,具体时间以官网通知为准。报考时间提前2个月报名,2023年的最后一次考试时间是11月,已经截止报名了。所以下一次考试就得等到2024年3月了。 想知道怎么备考先来分析一下现在的“新”考纲&…

进程同步与进程互斥-第二十四天

目录 前言 什么是进程同步 什么是进程互斥 四大区 遵循原则 本节思维导图 前言 进程具有异步性,异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进,因此为了让进程以我们想要的顺序执行,操作系统引入了“进…

概率中的50个具有挑战性的问题[03/50]:轻率的陪审员

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒(Frederick Mosteller)的《概率论中的五十个具有挑战性的问题与解决方案》(Fifty Challenge Problems in Probability with Solutions)一书。我认为…

如何修复concrt140.dll丢失问题,分享4种有效的方法

在计算机使用的过程中,我们经常会遇到一些错误提示或者系统崩溃的情况。其中之一就是“concrt140.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些措施来修复丢失的concrt140.dll文件。本文将介绍五个解决co…

C++ 强制类型转换static_cast<typeName>

C允许通过强制类型转换机制显式地进行类型转换。强制类型转换的格式有两种。 如: 为将存储在变量nData中的int值转换为long类型,可以使用下面的表达式中的一种: (long)nData …

对数函数求导

方法 一般形 复合型 复杂复合型

【编译原理--复习】

知识点整理 第一章 同时伴有表格管理、出错处理 1、词法分析 任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等)符号 输入:源程序 输出:单词符号序列 2、语法分析 任务:根据语言的语法规则对单词符号…

数据分析基础之《numpy(5)—合并与分割》

了解即可,用panads 一、作用 实现数据的切分和合并,将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

drools入门案例

1 业务场景说明 业务场景:消费者在图书商城购买图书,下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下: 规则编号 规则名称 描述 1 规则一 所购图书总价在100元以下的没有优惠 2 规则二 所购图书总价在100到200元的优惠2…

tampermonkey:Tampermonkey受欢迎的用户脚本管理器油猴

Tampermonkey for Mac是一款用户脚本管理器,主要用于在网页上运行自定义的JavaScript代码,以增强网站的功能和外观。它支持在各种浏览器中使用,包括Chrome、Firefox和Safari等主要浏览器。 以下是Tampermonkey for Mac软件的主要特点&#x…

RocketMQ 入门:MQ 基础概念、集群搭建与高可用配置,消息示例详解

RocketMQ 入门 视频地址: 千锋教育RocketMQ全套视频教程,快速掌握MQ消息中间件 什么是 MQ ? Message Queue(消息 队列),从字面上理解:首先它是一个队列。FIFO 先进先出的数据结构 —— 队列…

postgresql|数据库|LVM快照热备冷恢复数据库的思考

一, LVM快照备份的意义 数据库备份一直是数据库运维工作中的重点,一个完备的备份不仅仅是仅有后悔药的功能,还可能有迁移数据库的作用。 那么,数据库备份系统我们需要的,也就是看重的是四个点,甚至更多的…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

java的XWPFDocument3.17版本学习

maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 测试类&#xff1a; import org.apache.poi.openxml4j.exceptions.InvalidFormatExcep…

Python+Playwright自动化测试--playwright处理浏览器多窗口切换

1.简介 浏览器多窗口的切换问题相比大家不会陌生吧&#xff0c;之前小编在javaselenium系列文章中就有介绍过。大致步骤就是&#xff1a;使用selenium进行浏览器的多个窗口切换测试&#xff0c;如果我们打开了多个网页&#xff0c;进行网页切换时&#xff0c;我们需要先获取各…

R软件包ConsensusCluster进行共识聚类(Consensus Clustering)

从下面论文看到这个方法&#xff1a; Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. 这篇论文基于 AI 方法对 bulk RNA-seq 数据识别肿瘤微环…

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习&#xff08;含PYTHON工程&#xff09; LunarLander复现&#xff1a; 07、基于LunarLander登陆器的DQN强化学习案例&#xff08;含PYTHON工程&#xff09; 08、基于LunarLander登陆器的DDQN强化学习&#xff08;含PYTHON工程…

【动态规划算法(dp算法)】之背包问题

文章目录 背包问题动规五部曲一、0-1背包问题 &#xff1a;限制物品不可重复 (要么不选 要么选一个)二、完全背包问题&#xff1a;不限制重复&#xff08;要么不选 要么可以多选&#xff09;&#xff08;完全背包可以转化为0-1背包问题&#xff09; 动态规划&#xff1a;01背包…