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

Java实战:图像浏览器

文章目录

  • 1. 实战概述
  • 2. 知识准备
  • 3. 实现步骤
    • 3.1 创建Java项目
    • 3.2 创建图像浏览器类
      • 3.2.1 声明变量与常量
      • 3.2.2 创建构造方法
      • 3.2.3 创建初始化界面方法
      • 3.2.4 创建处理事件方法
      • 3.2.5 创建主方法
      • 3.2.6 查看完整代码
    • 3.3 运行程序,查看结果
  • 4. 实战小结
  • 5. 扩展练习

1. 实战概述

  • 在本次实战中,我们将通过一个简单的Java Swing图像浏览器案例,学习如何构建GUI应用程序。用户通过菜单项打开文件选择器对话框,选择图片文件后,图片会在窗口标签中显示。此案例将涵盖菜单栏、文件对话框和图片显示等核心功能,帮助大家快速掌握Java Swing的基本应用。

2. 知识准备

  1. 窗口(JFrame):用于创建应用程序的主窗口
  2. 标签(JLabel):用于显示文本或图像
  3. 菜单(JMenuBar、JMenu、JMenuItem):用于创建菜单栏、菜单和菜单项
  4. 文件选择器(JFileChooser):用于选择文件
  5. 事件处理:通过注册监听器并实现事件处理方法,响应用户操作

3. 实现步骤

3.1 创建Java项目

  • 设置项目基本信息
    在这里插入图片描述
  • 单击【Create】按钮,生成项目基本骨架
    在这里插入图片描述

3.2 创建图像浏览器类

  • 创建net.huawei.gui
    在这里插入图片描述
  • net.huawei.gui包里创建ImageViewer
    在这里插入图片描述
  • ImageViewer继承JFrame
    在这里插入图片描述

3.2.1 声明变量与常量

  • 声明六个变量
    在这里插入图片描述

3.2.2 创建构造方法

  • 构造方法里调用初始化界面方法和事件处理方法
    在这里插入图片描述

3.2.3 创建初始化界面方法

  • 创建initGUI()方法
    在这里插入图片描述
  • 代码说明:这段代码是图像浏览器的界面初始化方法,用于设置程序的初始界面。它首先设置窗口大小为600×500像素,然后创建一个标签组件用于后续显示图片。接着创建一个文件选择器,设置其初始目录为当前目录。之后构建菜单栏,添加“文件”菜单,并在其中添加“打开”和“退出”两个菜单项,分别用于打开图片和退出程序。最后,设置窗口的默认关闭操作、居中显示,并将其设置为可见状态。

3.2.4 创建处理事件方法

  • 创建handleEvents()方法
    在这里插入图片描述
  • 代码说明:这段代码实现了图像浏览器的事件处理逻辑。它为“打开”菜单项添加了事件监听器,当用户点击时,会弹出文件选择器对话框。如果用户选择了图片文件,程序会获取文件路径并将其设置为标签的图标,从而在窗口中显示图片。同时,“退出”菜单项的事件监听器用于关闭程序。

3.2.5 创建主方法

  • 主方法里实例化图像浏览器
    在这里插入图片描述

3.2.6 查看完整代码

package net.huawei.gui;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;/*** 功能:图像浏览器类* 作者:华卫* 日期:2025年01月31日*/
public class ImageViewer extends JFrame {private JLabel label; // 标签private JFileChooser chooser; // 文件选择器private JMenuBar menuBar; // 菜单栏private JMenu mnuFile; // 文件菜单private JMenuItem mniOpen; // 打开菜单项private JMenuItem mniExit; // 退出菜单项/*** 构造方法*/public ImageViewer(String title) {super(title);initGUI(); // 调用初始化界面方法handleEvents(); // 调用事件处理方法}/*** 初始化界面方法*/private void initGUI() {// 设置窗口尺寸setSize(600, 500);// 创建标签label = new JLabel();add(label);// 创建文件选择器chooser = new JFileChooser();chooser.setCurrentDirectory(new File("."));// 创建菜单栏menuBar = new JMenuBar();setJMenuBar(menuBar); // 设置菜单栏// 添加文件菜单mnuFile = new JMenu("文件(F)");mnuFile.setMnemonic('F'); // 设置热键字母menuBar.add(mnuFile);// 添加【打开】菜单项mniOpen = new JMenuItem("打开(O)");mniOpen.setMnemonic('O');  // 设置热键字母mnuFile.add(mniOpen);// 添加【退出】菜单项mniExit = new JMenuItem("退出(X)");mniExit.setMnemonic('X');  // 设置热键字母mnuFile.add(mniExit);// 设置窗口缺省关闭操作setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口屏幕居中setLocationRelativeTo(null);// 设置窗口可见setVisible(true);}/*** 处理事件方法*/private void handleEvents() {// 处理【打开】菜单项的事件mniOpen.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {// 显示文件选择器对话框int choice = chooser.showOpenDialog(null);// 如果选择了文件,那么将其设置为标签的图标if (choice == JFileChooser.APPROVE_OPTION) {String name = chooser.getSelectedFile().getPath();label.setIcon(new ImageIcon(name));}}});// 处理【退出】菜单项的事件mniExit.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {System.exit(0); // 退出应用程序}});}/*** 主方法** @param args*/public static void main(String[] args) {new ImageViewer("图像浏览器V1.0");}
}

3.3 运行程序,查看结果

  • 运行ImageViewer,显示主窗口
    在这里插入图片描述
  • 打开文件菜单
    在这里插入图片描述
  • 单击【打开】菜单项,选择要打开的图片文件deepseek.jpg
    在这里插入图片描述
  • 单击【打开】按钮,浏览图片
    在这里插入图片描述

4. 实战小结

  • 在本次实战中,我们通过Java Swing实现了一个简单的图像浏览器应用程序。首先,我们创建了一个JFrame窗口,并添加了菜单栏、标签和文件选择器等组件。通过JFileChooser,用户可以选择本地图片文件,并将其显示在窗口的标签中。事件处理部分通过ActionListener实现了“打开”和“退出”菜单项的功能,确保用户操作能够正确响应。通过这个案例,我们掌握了Java Swing的基本组件使用和事件处理机制,为后续开发更复杂的GUI应用奠定了基础。

5. 扩展练习

  1. 添加图片缩放功能:允许用户调整图片的大小。
  2. 支持多种图片格式:扩展文件选择器,支持更多图片格式。
  3. 添加工具栏:在窗口中添加工具栏,提供常用操作的快捷方式。

相关文章:

Java实战:图像浏览器

文章目录 1. 实战概述2. 知识准备3. 实现步骤3.1 创建Java项目3.2 创建图像浏览器类3.2.1 声明变量与常量3.2.2 创建构造方法3.2.3 创建初始化界面方法3.2.4 创建处理事件方法3.2.5 创建主方法3.2.6 查看完整代码 3.3 运行程序,查看结果 4. 实战小结5. 扩展练习 1. …...

SARIMA介绍

SARIMA模型,即季节性自回归积分移动平均模型(Seasonal Autoregressive Integrated Moving Average Model),是一种用于处理和预测具有明显季节性变化的时间序列数据的统计模型。它是ARIMA模型的一种扩展,通过引入额外的…...

I.MX6ULL 中断介绍上

i.MX6ULL是NXP(原Freescale)推出的一款基于ARM Cortex-A7内核的微处理器,广泛应用于嵌入式系统。在i.MX6ULL中,中断(Interrupt)是一种重要的机制,用于处理外部或内部事件,允许微处理…...

Spring Boot WebMvcConfigurer:定制你的 Web 应用

在构建基于Spring Boot的Web应用程序时,WebMvcConfigurer接口扮演着至关重要的角色。它允许开发者以一种简洁且非侵入的方式自定义Spring MVC的功能,而无需直接扩展框架的核心组件。本文将深入探讨WebMvcConfigurer的作用、如何实现其方法以及在实际项目…...

(即插即用模块-特征处理部分) 十九、(NeurIPS 2023) Prompt Block 提示生成 / 交互模块

文章目录 1、Prompt Block2、代码实现 paper:PromptIR: Prompting for All-in-One Blind Image Restoration Code:https://github.com/va1shn9v/PromptIR 1、Prompt Block 在解决现有图像恢复模型时,现有研究存在一些局限性: 现有…...

单链表专题(中)

我们接着上一篇文章,继续对单链表的实现进行扩充 链表的头删 我们在进行头删的时候,不能先释放掉头节点再将头节点传到第二节点上,这样会导致找不到第二个节点了 void SLTPopFront(SLTNode** pphead) {assert(pphead && *pphead);…...

表格结构标签

<!-- thead表示表格的头部 tbody表示表格的主体 --> <thead></thead> <tbody></tbody> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&q…...

A星算法两元障碍物矩阵转化为rrt算法四元障碍物矩阵

对于a星算法obstacle所表示的障碍物障碍物信息&#xff0c;每行表示一个障碍物的坐标&#xff0c;例如2 , 3; % 第一个障碍物在第二行第三列&#xff0c;也就是边长为1的正方形障碍物右上角横坐标是2&#xff0c;纵坐标为3&#xff0c;障碍物的宽度和高度始终为1.在rrt路径规划…...

MySQL数据库(二)- SQL

目录 ​编辑 一 DDL (一 数据库操作 1 查询-数据库&#xff08;所有/当前&#xff09; 2 创建-数据库 3 删除-数据库 4 使用-数据库 (二 表操作 1 创建-表结构 2 查询-所有表结构名称 3 查询-表结构内容 4 查询-建表语句 5 添加-字段名数据类型 6 修改-字段数据类…...

数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)

一、前提 二、模型评估 1.改造⑥ 2.Cross Validation算子说明 2.1Cross Validation 的作用 2.1.1 模型评估 2.1.2 减少过拟合 2.1.3 数据利用 2.2 Cross Validation 的工作原理 2.2.1 数据分割 2.2.2 迭代训练与测试 ​​​​​​​ 2.2.3 结果汇总 ​​​​​​​ …...

19 压测和常用的接口优化方案

高并发的平台应用&#xff0c;项目上线前离不开一个重要步骤就是压测&#xff0c;压测对于编码中的资源是否问题的排查&#xff0c;性能的调优都是离不开的。测试还要做测试报告&#xff0c;出具了测试报告给到运维团队才能上线。 压测的测试报告主要有以下几个方面:1.响应时间…...

gentoo中利用ollama运行DeepSeek-R1

一、安装ollama gentoo linux中 1.安装步骤&#xff1a; Step1. #cd /usr/local/src Step2. #wget2 -o -V https://ollama.com/install.sh Setp3. #sh ./install.sh 2.ollama完成安装。查看ollama版本&#xff1a; 3.查看ollama服务运行状态&#xff1a; 二、安装&#xf…...

远程连接-简化登录

vscode通过ssh连接远程服务器免密登录&#xff08;图文&#xff09;_vscode ssh-CSDN博客...

PHP中配置 variables_order详解

variables_order 是 PHP 配置文件 php.ini 中的一项配置指令&#xff0c;决定了 PHP 在处理请求时&#xff0c;哪些类型的变量将被注册到全局变量空间&#xff08;如 $GLOBALS&#xff09;中&#xff0c;以及这些变量的顺序。理解和正确配置 variables_order 对于开发和维护安全…...

为什么推荐将静态资源放在CDN上?

1. CDN 是什么&#xff1f; CDN&#xff08;Content Delivery Network&#xff09;是一种分布式网络&#xff0c;由地理上分散的服务器节点组成。其主要功能是将静态资源缓存到各地的边缘服务器上&#xff0c;从而将内容更快地传递给用户。当用户请求资源时&#xff0c;CDN 会…...

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…...

工作总结:压测篇

前言 压测是测试需要会的一项技能&#xff0c;作为开发&#xff0c;有点时候也要会一点压测。也是被逼着现学现卖的。 一、压测是什么&#xff0c;以及压测工具的选择 压测&#xff0c;即压力测试&#xff0c;是一种性能测试手段&#xff0c;通过模拟大量用户同时访问系统&am…...

MySQL基本架构SQL语句在数据库框架中的执行流程数据库的三范式

MySQL基本架构图&#xff1a; MySQL主要分为Server层和存储引擎层 Server层&#xff1a; 连接器&#xff1a;连接客户端&#xff0c;获取权限&#xff0c;管理连接 查询缓存&#xff08;可选&#xff09;&#xff1a;在执行查询语句之前会先到查询缓存中查看是否执行过这条语…...

CSS 中调整元素大小的全面指南

CSS 中调整元素大小的全面指南 1. 原始尺寸&#xff08;固有尺寸&#xff09;示例代码&#xff1a;图像的固有尺寸 2. 设置具体的尺寸示例代码&#xff1a;设置固定宽度和高度 3. 使用百分比示例代码&#xff1a;使用百分比设置宽度 4. 使用百分比作为外边距和内边距示例代码&a…...

Hive存储系统全面测试报告

引言 在大数据时代&#xff0c;数据存储和处理技术的重要性日益凸显。Apache Hive作为一个基于Hadoop的数据仓库工具&#xff0c;因其能够提供类SQL查询功能&#xff08;HiveQL&#xff09;而广受欢迎。Hive的设计初衷是为了简化大数据集的查询和管理&#xff0c;它允许用户通…...

minimind - 从零开始训练小型语言模型

大语言模型&#xff08;LLM&#xff09;领域&#xff0c;如 GPT、LLaMA、GLM 等&#xff0c;虽然它们效果惊艳&#xff0c; 但动辄10 Bilion庞大的模型参数个人设备显存远不够训练&#xff0c;甚至推理困难。 几乎所有人都不会只满足于用Lora等方案fine-tuing大模型学会一些新的…...

前端知识速记—JS篇:箭头函数

前端知识速记—JS篇&#xff1a;箭头函数 什么是箭头函数&#xff1f; 箭头函数是 ES6 引入的一种新的函数书写方式&#xff0c;其语法更为简洁&#xff0c;常用于替代传统的函数表达式。箭头函数的基本语法如下&#xff1a; const functionName (parameters) > {// 函数…...

小程序的协同工作与发布

1.小程序API的三大分类 2.小程序管理的概念&#xff0c;以及成员管理两个方面 3.开发者权限说明以及如何维护项目成员 4.小程序版本...

计算机网络 笔记 网络层 3

IPv6 IPv6 是互联网协议第 6 版&#xff08;Internet Protocol Version 6&#xff09;的缩写&#xff0c;它是下一代互联网协议&#xff0c;旨在解决 IPv4 面临的一些问题&#xff0c;以下是关于 IPv6 的详细介绍&#xff1a; 产生背景&#xff1a; 随着互联网的迅速发展&…...

python 语音识别

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…...

事务02之锁机制

锁机制 文章目录 锁机制一&#xff1a;MySQL锁的由来与分类1&#xff1a;锁机制的分类 二&#xff1a;共享锁与排他锁1&#xff1a;共享锁(S锁)2&#xff1a;排他锁(X锁)3&#xff1a;锁的释放 二&#xff1a;表级别锁1&#xff1a;元数据锁(了解)2&#xff1a;意向锁3&#xf…...

Python NumPy(10):NumPy 统计函数

1 NumPy 统计函数 NumPy 提供了很多统计函数&#xff0c;用于从数组中查找最小元素&#xff0c;最大元素&#xff0c;百分位标准差和方差等。 1.1 numpy.amin() 和 numpy.amax() numpy.amin() 用于计算数组中的元素沿指定轴的最小值。 numpy.amin(a, axisNone, outNone, keep…...

[Spring] Gateway详解

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

TCP三次握手和四次挥手面试题

TCP标志位TCP序列号、确认号三次握手 三次握手过程为什么不是两次握手&#xff1f;为什么不是四次握手&#xff1f; 为什么超时重传&#xff1f;如何处理丢包 为什么需要超时重传?如何处理丢包&#xff1f; 四次挥手 四次挥手过程为什么需要四次挥手为什么四次挥手&#xff0c…...

使用openAI与Deepseek的感受

今天简单介绍下使用OpenAI和DeepSeek的感觉&#xff0c;有些地方可能存在不准确的地方&#xff0c;望指正&#xff1a; 从2023年的秋冬到现在2025年的1月间&#xff0c;OpenAI和DeepSeek我都用它们来帮我&#xff0c;当然更多的是OpenAI&#xff0c;但整体感受如下&#xff1a;…...