ImageView设置图片

JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置

ImageView设置图片

首先,我们让fxml对应的那个controller的java文件实现Initializable接口,之后就在复写的该接口的initialize方法中设置我们ImageView的图片

我的图片是放在了一个img文件夹里



之后,和之前的fxml一样,得去修改pom.xml,不然maven就会把img这个文件夹的内容全部忽略掉,之后就会找不到图片文件

@Override
public void initialize(URL location, ResourceBundle resources) {
//设置图片,inPathImg是ImageView
Image image = new Image(getClass().getResource("img/file.png").toString());
inPathImg.setImage(image);
}

扩展,封装工具类PathUtil

上面的虽然是成功设置了图片,但是每次这样写也是麻烦,所以我就封装了一个类来快速得到图片

/**
* 获得图片文件,
* @param o 当前的class,传入this即可
* @param fileName 图片名+扩展名
* @return 图片image
*/
public static Image getImg(Object o, String fileName) {
URL res = o.getClass().getResource("img");
if (fileName.contains(".")) {
String temp = res.toString() + "/" + fileName;
return new Image(temp);
}
return null;
}

使用的时候这样用

@Override
public void initialize(URL location, ResourceBundle resources) {
//设置图片
inPathImg.setImage(PathUtil.getImg(this, "file.png"));
outPathImg.setImage(PathUtil.getImg(this, "file.png"));
}

扩展,工具类获得fxml文件路径

原本,测试的时候是没有问题的,但是,如果是项目封装成jar包,之后打开就会报错。

网上查了资料,原来是jar包中不能直接使用File这个类,要想使用jar包里面的文件,得使用IO流的方式

/**
* 获得fxml文件路径
* @param o class文件,传入this
* @param fileName 文件名
* @return
*/
public static URL getFxmlPath(Object o,String fileName) { return o.getClass().getResource("fxml/"+fileName+".fxml");
} /**
* 获得文件
* @param Object o this
* @param String fileName 文件名
*/
public static InputStream getFxmlFile(Object o,String fileName) {
return o.getClass().getResourceAsStream("fxml/"+fileName+".fxml");
}

Main里面调用

@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(); // 创建对象
loader.setBuilderFactory(new JavaFXBuilderFactory()); // 设置BuilderFactory
loader.setLocation(PathUtil.getFxmlPath(this, "scene_main"));//获得fxml的路径
InputStream inputStream = PathUtil.getFxmlFile(this, "scene_main");//加载jar包中的fxml文件
Object o = loader.load(inputStream); //这是之前使用的方式,使用的是FXMLLoader的静态方法,如果使用jar包的方式,则会报错
//Parent root = FXMLLoader.load(PathUtil.getFxmlPath(this,"scene_main"));
Parent root = (Parent) o;
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show(); }

PathUtil源码

package wan.Utils;

import java.io.InputStream;
import java.net.URL; import javafx.scene.image.Image; /**
* @author StarsOne
* @date Create in 2019/6/5 0005 14:01
* @description
*/
public class PathUtil {
/**
* 获得图片文件,
* @param o 当前的class,传入this即可
* @param fileName 图片名+扩展名
* @return 图片image
*/
public static Image getImg(Object o, String fileName) {
URL res = o.getClass().getResource("img");
if (fileName.contains(".")) {
String temp = res.toString() + "/" + fileName;
return new Image(temp);
}
return null;
} /**
* 获得fxml文件路径
* @param o class文件,传入this
* @param fileName 文件名
* @return
*/
public static URL getFxmlPath(Object o,String fileName) { return o.getClass().getResource("fxml/"+fileName+".fxml");
} public static InputStream getFxmlFile(Object o,String fileName) {
return o.getClass().getResourceAsStream("fxml/"+fileName+".fxml");
} }

Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件的更多相关文章

  1. Java开发桌面程序学习(一)——JavaFx+Jfoenix初始以及搭建

    Java开发桌面程序学习(一)--JavaFx+Jfoenix初始以及搭建 前言 想做一个Java的桌面程序,但是,使用原生的Swing感觉又十分麻烦,那个布局都是拿代码设置,看着十分的乱,偶然的情况 ...

  2. Java开发桌面程序学习(四)——常用应用布局模板和简单分析

    布局 前言 刚开始的时候,不知道使用什么布局,发现SceneBuilder其实有8.5版本的,里面就是有提供一个简单的桌面程序模板,8.5可以去官网下载,不过网速好像有点慢,慢慢等吧,官网下载地址 布 ...

  3. Java开发桌面程序学习(九)——JavaFxTemplate JavaFx模版 更简单进行JavaFx程序开发

    JavaFxTemplate 使用说明 项目基于maven,请确保maven配置成功,否则,可能会出现问题 项目内置了commons-io的jar包,Jfoenix的jar包以及常用的工具类JFxUt ...

  4. Java开发桌面程序学习(十)——css样式表使用以及Button悬浮改变样式实现

    css样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 ja ...

  5. Java开发桌面程序学习(10)——css样式表使用以及Button使用

    css 样式表使用 javafx中的css样式,与html的有些不一样,javafx中的css,是以-fx-background-color这种样子的,具体可以参考文档JavaFx css官方文档 简 ...

  6. Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用

    启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/k ...

  7. Java开发桌面程序学习(六)——拖动文件获得文件路径

    拖动获得文件路径 在windows软件中,很多软件都提供了拖动文件的打开文件的功能,JavaFx中也是有这功能,是通过监听器来实现的 监听器 setOnDragDetected(new EventHa ...

  8. Java开发桌面程序学习(二)————fxml布局与控件学习

    JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...

  9. Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder

    对话框的封装使用 最近写了个JFXUtils,DialogBuilder也是包含在里面了 JFXUtils的Github 前言 登录需要弹出登录对话框,但是,Jfoenix库使用对话框比较难受,还得动 ...

随机推荐

  1. Goland安装

    Goland安装 http://c.biancheng.net/view/6124.html

  2. Windows安装与配置—Node.js

    一.搭建环境 1.下载软件 打开下载链接:https://nodejs.org/zh-cn/ , 2.双击安装,指定安装位置 3.测试是否安装成功 用管理员方式打开命令行cmd,输入node -v如果 ...

  3. SpringCloud微服务(05):Zuul组件,实现路由网关控制

    本文源码:GitHub·点这里 || GitEE·点这里 一.Zuul组件简介 1.基础概念 Zuul 网关主要提供动态路由,监控,弹性,安全管控等功能.在分布式的微服务系统中,系统被拆为了多个微服务 ...

  4. .Net Core权限认证基于Cookie的认证&授权.Scheme、Policy扩展

    在身份认证中,如果某个Action需要权限才能访问,最开始的想法就是,哪个Action需要权限才能访问,我们写个特性标注到上面即可,[TypeFilter(typeof(CustomAuthorize ...

  5. sed 面试题

    #oldboy my qq num is 49000448.$ not 4900000448. my god ,i am not oldbey,but clsn!$ #oldboy my name i ...

  6. Cobalt Strike系列教程第五章:截图与浏览器代理

    Cobalt Strike系列教程分享如约而至,新关注的小伙伴可以先回顾一下前面的内容: Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  7. Java - IO 扫描流:Scanner

    IO_扫描流:Scanner 在改进输出功能不足方面提供了打印流(PrintSream):利用BufferedReader类(缓冲输入流)解决了大文本数据的输入和读取操作,但是BufferedRead ...

  8. Windows下使用PuTTY连接Centos7、Linux系统目录结构、一些操作命令

    PuTTY可以远程管理Linux.PuTTY官网:https://www.putty.org/ 一.使用PuTTY连接Centos7 下载安装后,打开如下图: 1.输入主机名或IP地址2.端口号默认2 ...

  9. Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结

    创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 字段类型 默认值 是否为空, ...... ); 创建一个us ...

  10. mysql 安装(Linux、Ubuntu)

    1.检查系统是否已经安装过mysql rpm -qa | grep mysql 若出现类似于以上的结果则表明系统已经安装过mysql,执行以下命令卸载 rpm -e --nodeps mysql-co ...