Java实战:图像浏览器

news2025/2/1 21:58:44

文章目录

  • 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. 添加工具栏:在窗口中添加工具栏,提供常用操作的快捷方式。

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

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

相关文章

I.MX6ULL 中断介绍上

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

(即插即用模块-特征处理部分) 十九、(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 在解决现有图像恢复模型时,现有研究存在一些局限性: 现有…

MySQL数据库(二)- SQL

目录 ​编辑 一 DDL (一 数据库操作 1 查询-数据库(所有/当前) 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 结果汇总 ​​​​​​​ …

gentoo中利用ollama运行DeepSeek-R1

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

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

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

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

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

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

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

小程序的协同工作与发布

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

计算机网络 笔记 网络层 3

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

python 语音识别

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

事务02之锁机制

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

Python NumPy(10):NumPy 统计函数

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

[Spring] Gateway详解

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

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

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

使用openAI与Deepseek的感受

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

FFmpeg(7.1版本)在Ubuntu18.04上的编译

一、从官网上下载FFmpeg源码 官网地址:Download FFmpeg 点击Download Source Code 下载源码到本地电脑上 二、解压包 tar -xvf ffmpeg-7.1.tar.xz 三、配置configure 1.准备工作 安装编译支持的软件 ① sudo apt-get install nasm //常用的汇编器,…

为AI聊天工具添加一个知识系统 之80 详细设计之21 符号逻辑 之1

本文要点 要点 前面我们讨论了本项目中的正则表达式。现在我们将前面讨论的正则表达式视为狭义的符号文本及其符号规则rule(认识的原则--认识上认识对象的约束),进而在更广泛的视角下将其视为符号逻辑及其符号原则principle(知识…

【C++】类和对象(5)

目录 一、构造函数补充1、初始化列表 二、类型转换三、static成员四、友元1、友元函数2、友元类 五、内部类六、匿名对象 一、构造函数补充 对于之前讲解的构造函数,还有一些更深层次的内容要进行补充,接下来进行补充内容的讲解。 1、初始化列表 在我…

FPGA|使用quartus II通过AS下载POF固件

1、将开发板设置到AS下载挡位,或者把下载线插入到AS端口 2、打开quartus II,选择Tools→Programmer→ Mode选择Active Serial Programming 3、点击左侧Add file…,选择 .pof 文件 →start 4、勾选program和verify(可选&#xff0…