news 2026/6/12 6:56:50

JavaFX 图片查看器:从文件选择到图片展示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaFX 图片查看器:从文件选择到图片展示

JavaFX 图片查看器:从文件选择到图片展示

上一篇我们解决了 JavaFX-MediaPlayer 参数URI格式问题,今天继续探索 JavaFX 的实用功能——图片查看器。我们将实现一个支持本地文件选择、图片预览、缩放拖拽的完整示例。


一、最终效果预览

运行程序后,点击「打开文件」按钮选择图片,即可在窗口中展示:

上图展示了程序主界面:标题栏显示「文件选择器」,包含一个「打开文件」按钮,下方展示选中的图片。


二、完整代码

importjavafx.application.Application;importjavafx.geometry.Insets;importjavafx.geometry.Pos;importjavafx.scene.Scene;importjavafx.scene.control.Button;importjavafx.scene.image.Image;importjavafx.scene.image.ImageView;importjavafx.scene.layout.BorderPane;importjavafx.scene.layout.HBox;importjavafx.stage.FileChooser;importjavafx.stage.Stage;importjava.io.File;publicclassImageViewerextendsApplication{privateImageViewimageView;@Overridepublicvoidstart(StageprimaryStage){// 1. 创建根布局BorderPaneroot=newBorderPane();root.setPadding(newInsets(10));// 2. 创建图片展示区域imageView=newImageView();imageView.setPreserveRatio(true);// 保持宽高比imageView.setFitWidth(800);// 默认适应宽度imageView.setFitHeight(600);// 默认适应高度root.setCenter(imageView);// 3. 创建顶部工具栏HBoxtopBar=newHBox(10);topBar.setAlignment(Pos.CENTER_LEFT);topBar.setPadding(newInsets(0,0,10,0));ButtonopenBtn=newButton("打开文件");openBtn.setOnAction(e->openImage(primaryStage));topBar.getChildren().add(openBtn);root.setTop(topBar);// 4. 创建场景并展示Scenescene=newScene(root,900,700);primaryStage.setTitle("文件选择器");primaryStage.setScene(scene);primaryStage.show();}/** * 打开文件选择器并加载图片 */privatevoidopenImage(Stagestage){FileChooserfileChooser=newFileChooser();fileChooser.setTitle("选择图片文件");// 设置文件过滤器,只允许图片格式fileChooser.getExtensionFilters().addAll(newFileChooser.ExtensionFilter("图片文件","*.png","*.jpg","*.jpeg","*.gif","*.bmp"),newFileChooser.ExtensionFilter("所有文件","*.*"));Filefile=fileChooser.showOpenDialog(stage);if(file!=null){// 使用 file.toURI() 获取正确的 URI 格式// 这与上一篇 MediaPlayer 的 URI 处理思路一致Imageimage=newImage(file.toURI().toString());imageView.setImage(image);}}publicstaticvoidmain(String[]args){launch(args);}}

三、核心知识点解析

3.1 FileChooser 文件选择器

JavaFX 提供了FileChooser类来创建原生风格的文件选择对话框:

方法说明
setTitle(String)设置对话框标题
setInitialDirectory(File)设置默认打开目录
getExtensionFilters()添加文件类型过滤器
showOpenDialog(Stage)显示打开文件对话框

3.2 图片 URI 的正确处理

上一篇我们解决了 MediaPlayer 的 URI 格式问题,图片加载同样需要正确处理:

// ❌ 错误:直接使用文件路径Imageimage=newImage("D:\图片\test.png");// 会报错!// ✅ 正确:使用 File.toURI()Imageimage=newImage(file.toURI().toString());// file:///D:/图片/test.png

核心原则:JavaFX 的ImageMedia类都需要标准 URI 格式,Windows 路径中的反斜杠和中文都会导致解析失败。

3.3 ImageView 常用属性

imageView.setPreserveRatio(true);// 保持原始宽高比imageView.setFitWidth(800);// 限制最大宽度imageView.setFitHeight(600);// 限制最大高度imageView.setSmooth(true);// 启用平滑缩放imageView.setCache(true);// 启用缓存提升性能

四、运行效果截图

4.1 选择图片文件

弹出系统原生的文件选择对话框,已过滤为图片格式。

4.2 图片展示效果

选中的图片自适应窗口大小展示,保持原始比例不变形。


五、进阶:添加缩放和拖拽功能

如果想实现类似图片浏览器的缩放拖拽效果,可以添加以下代码:

// 在 start() 方法中,创建 imageView 后添加:// 鼠标滚轮缩放imageView.setOnScroll(e->{doubledelta=e.getDeltaY();doublescale=imageView.getScaleX();if(delta>0){scale*=1.1;// 放大}else{scale*=0.9;// 缩小}// 限制缩放范围scale=Math.max(0.1,Math.min(scale,5.0));imageView.setScaleX(scale);imageView.setScaleY(scale);});// 鼠标拖拽平移finaldouble[]dragDelta=newdouble[2];imageView.setOnMousePressed(e->{dragDelta[0]=imageView.getTranslateX()-e.getSceneX();dragDelta[1]=imageView.getTranslateY()-e.getSceneY();});imageView.setOnMouseDragged(e->{imageView.setTranslateX(e.getSceneX()+dragDelta[0]);imageView.setTranslateY(e.getSceneY()+dragDelta[1]);});

六、总结

知识点要点
FileChooser使用showOpenDialog()弹出文件选择器
文件过滤通过ExtensionFilter限制可选文件类型
URI 转换始终使用file.toURI().toString()获取正确路径
ImageViewsetPreserveRatio(true)保持图片比例
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 6:53:44

LLM API协议栈瘦身:客户端零层架构原理与实操

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题乍看像科技媒体的夸张头条,但作为在AI基础设施层摸爬滚打十年、亲手部署过上百个LLM服务栈的老兵&a…

作者头像 李华
网站建设 2026/6/12 6:53:13

如何免费解锁AMD Ryzen处理器隐藏性能:SMUDebugTool终极指南

如何免费解锁AMD Ryzen处理器隐藏性能:SMUDebugTool终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…

作者头像 李华
网站建设 2026/6/12 6:50:57

开源 | HUIZHI charge 慧知开源私桩共享智能充电平台 V2.0.1 —— 充电桩+地锁+门禁一体化、OCPP1.6J+云快充双协议、多租户SaaS、自动分账、无感支付、全流程自动化运营

HUIZHI charge 慧知开源私桩共享智能充电平台 V2.0.1 —— 充电桩地锁门禁一体化、OCPP1.6J云快充双协议、多租户SaaS、自动分账、无感支付、全流程自动化运营 如果对您有帮助,您可以点右上角 “Star” ❤ 支持一下谢谢! 📖 项目介绍 现在…

作者头像 李华