JavaFX仿windows文件管理器目录树

一、windows文件管理器目录树

 

二、代码

/** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/
package cn.util;import imagemanagesystem.FileTreeItem;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Scene;
import javafx.scene.control.TreeView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javax.swing.filechooser.FileSystemView;/**** @author MK*/
public class Test extends Application {public static File ROOT_FILE = FileSystemView.getFileSystemView().getRoots()[0];@Overridepublic void start(Stage stage) {HBox hBox = new HBox();TreeView<String> treeView = new TreeView<>();FileTreeItem fileTreeItem = new FileTreeItem(ROOT_FILE, f -> {File[] allFiles = f.listFiles();File[] directorFiles = f.listFiles(File::isDirectory);List<File> list = new ArrayList<>(Arrays.asList(allFiles));list.removeAll(Arrays.asList(directorFiles));return list.toArray(new File[list.size()]);});treeView.setRoot(fileTreeItem);treeView.setShowRoot(false);treeView.setMinWidth(250);hBox.getChildren().add(treeView);StackPane stackPane = new StackPane();stackPane.getChildren().add(hBox);Scene scene = new Scene(stackPane, 900, 700);stage.setScene(scene);stage.show();stage.setOnCloseRequest(e -> {System.exit(0);});}public static void main(String[] args) {launch(args);}}

 

package imagemanagesystem;import cn.util.U;
import static cn.util.Test.ROOT_FILE;
import java.io.File;
import java.util.function.Function;
import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem;/**** @author MK*/
public class FileTreeItem extends TreeItem<String> {//判断树节点是否被初始化,没有初始化为真private boolean notInitialized = true;private final File file;private final Function<File,File[]> supplier;public FileTreeItem(File file) {super(U.getFileName(file), U.getFileIconToNode(file));this.file = file;supplier = (File f) -> {if (((FileTreeItem) this.getParent()).getFile() == ROOT_FILE) {String name = U.getFileName(f);if (name.equals("网络") || name.equals("家庭组")) {return new File[0];}}return f.listFiles();};}public FileTreeItem(File file, Function<File,File[]> supplier) {super(U.getFileName(file),U.getFileIconToNode(file));this.file=file;this.supplier=supplier;}//重写getchildren方法,让节点被展开时加载子目录@Overridepublic ObservableList<TreeItem<String>> getChildren() {ObservableList<TreeItem<String>> children = super.getChildren();//没有加载子目录时,则加载子目录作为树节点的孩子if (this.notInitialized && this.isExpanded()) {this.notInitialized = false;    //设置没有初始化为假/*判断树节点的文件是否是目录,*如果是目录,着把目录里面的所有的文件目录添加入树节点的孩子中。*/if (this.getFile().isDirectory()) {for (File f : supplier.apply(this.getFile())) {//如果文件是目录,则把它加到树节点上if (f.isDirectory()) {children.add(new FileTreeItem(f));}}}}return children;}//重写叶子方法,如果该文件不是目录,则返回真@Overridepublic boolean isLeaf() {return !file.isDirectory();}/*** @return the file*/public File getFile() {return file;}}
package cn.util;import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.IntBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javafx.scene.canvas.Canvas;
import javafx.scene.image.PixelFormat;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritablePixelFormat;import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.filechooser.FileSystemView;/**** @author MK*/
public class U {//设置图标public static Canvas getFileIconToNode(File file) {//获取系统文件的图标Image image = (Image) ((ImageIcon) FileSystemView.getFileSystemView().getSystemIcon(file)).getImage();//构建图片缓冲区,设定图片缓冲区的大小和背景,背景为透明BufferedImage bi = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.BITMASK);bi.getGraphics().drawImage(image, 0, 0, null);          //把图片画到图片缓冲区//将图片缓冲区的数据转换成int型数组int[] data = ((DataBufferInt) bi.getData().getDataBuffer()).getData();//获得写像素的格式模版WritablePixelFormat<IntBuffer> pixelFormat= PixelFormat.getIntArgbInstance();Canvas canvas = new Canvas(bi.getWidth() + 2, bi.getHeight() + 2);    //新建javafx的画布//获取像素的写入器PixelWriter pixelWriter = canvas.getGraphicsContext2D().getPixelWriter();//根据写像素的格式模版把int型数组写到画布pixelWriter.setPixels(1, 1, bi.getWidth(), bi.getHeight(),pixelFormat, data, 0, bi.getWidth());//设置树节点的图标return canvas;}public static String getFileName(File file) {return FileSystemView.getFileSystemView().getSystemDisplayName(file);}}

 

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

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

相关文章

开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7

一、 引子 首先感谢博客园&#xff1a;第一篇文章、第一个开源项目&#xff0c;算是旗开得胜。可以看到&#xff0c;项目大部分流量来自于博客园&#xff0c;码农乐园&#xff0c;名不虚传^^。 园友给了我很多支持&#xff0c;并提出了很好的改进意见。现加入屏幕分辨率自适应…

有没有完全自助的国产化数据库技术?

大家好&#xff0c;我是雄雄。 SPL资料 SPL官网SPL下载SPL源代码 前段时间世界部分地区不断的起冲突&#xff0c;Oracle宣布“暂停在俄罗斯的所有业务”&#xff0c;相信大家的心情绝不是隔岸观火&#xff0c;而是细思恐极。 数据库号称IT领域三大核心之一&#xff08;其他两…

我为啥不看好ServiceMesh

转载自 我为啥不看好ServiceMesh 前言 今年&#xff0c;ServiceMesh(服务网格)概念在社区里头非常火&#xff0c;有人提出2018年是ServiceMesh年&#xff0c;还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师&#xff0c;如果你现在还不了解ServiceMesh的话&…

ASP.NET Core 2.0 支付宝当面付之扫码支付

前言 自从微软更换了CEO以后&#xff0c;微软的战略方向有了相当大的变化&#xff0c;不再是那么封闭&#xff0c;开源了许多东西&#xff0c;拥抱开源社区&#xff0c;.NET实现跨平台&#xff0c;收购xamarin并免费提供给开发者等等。我本人是很喜欢.net的&#xff0c;并希望.…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教

转载自 Git使用教程&#xff1a;最详细、最傻瓜、最浅显、真正手把手教 一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。 工作原理 / 流程&#xff1a; Workspace&#xff1a;工作区 Index / Stage&#xff1a;暂存区 Repository&…

【git】如何在github上推送并部署自己的项目

口令快捷 git add . git commit --m "XXXX" git remote add origin https://github.com/lifeload/new-problem.git git push -f origin master修改或删除文件 git add 对应文件/. git commit -m “xxx” git push origin master 1、上传代码 2、设置&#xff0c;建立…

一起聊聊Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.DependencyInjection在github上同样是开源的&#xff0c;它在dotnetcore里被广泛的使用&#xff0c;比起之前的autofac,unity来说&#xff0c;它可以说是个包裹&#xff0c;或者叫适配器&#xff0c;它自己提供了默认的DI实现&#xff0c;同时也支持第三方…

【git】如何给github绑定ssh

首先在git上输入 &#xff1a; ssh-keygen 会在c盘的用户账号的文件夹.ssh上生成两个密钥 &#xff08;如果没有生成&#xff0c;请注意自己是否按了enter&#xff0c;出现一个小方框为止&#xff09; 将.pug用笔记本打开 全选复制 来到github的设置上 将刚刚复制的东西黏…

【杭州】Hack for Cloud Beginner微软黑客松大赛

在这美丽的西子湖畔&#xff0c;我们欢迎各行各业的开发者参与此次Hack for Cloud Beginner微软黑客松大赛。我们致力于为开发者们提供在技术、社区领域中的交流平台&#xff0c;重在参与&#xff0c;意于创新。 此次黑客松大赛将于10月22日在中国杭州拉开帷幕&#xff0c;参与…

Java高级开发必会的50个性能优化的细节(珍藏版)

转载自 Java高级开发必会的50个性能优化的细节&#xff08;珍藏版&#xff09; 在JAVA程序中&#xff0c;性能问题的大部分原因并不在于JAVA语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显著地提升程序性能。 ● 1. 尽量在合适的场合使用单例…

从0部署一个动态网站

准备&#xff1a;购买域名和服务器 下载软件&#xff1a;服务器上下载宝塔面板和xampp 首先区分动态网站和静态网站区别&#xff1a;动态网站是指数据可以交互的&#xff0c;根据不同的人出现不同的页面&#xff0c;要用到数据库和php。登录注册是动态网站最基础的部分 而静态…

最新的.NET Framework聚焦于改进可访问性

Microsoft宣布预发布.NET Framework 4.7.1&#xff0c;其中包括了各种全面的改进。这里&#xff0c;我们关注一下在WPF应用可访问性上所做的改进。改进的设想针对领域是屏幕报读器&#xff08;Screen Reader&#xff09;和高对比度场景。Microsoft的Preeti Krishna表示&#xf…

ImageSharp一个专注于NetCore平台图像处理的开源项目

今天大家分享的是一个专注于NetCore平台图像处理的开源项目&#xff0c;老实说为这篇文章取名字想了5分钟&#xff0c;可能是词穷亦或是想更好的表达出这款开源项目的作用&#xff1b;这个项目在图像处理方面有很多功能&#xff0c;如&#xff1a;缩放&#xff0c;裁剪&#xf…

关于 JVM 内存的 N 个问题

转载自 关于 JVM 内存的 N 个问题 JVM的内存区域是怎么划分的&#xff1f; JVM的内存划分中&#xff0c;有部分区域是线程私有的&#xff0c;有部分是属于整个JVM进程&#xff1b;有些区域会抛出OOM异常&#xff0c;有些则不会&#xff0c;了解JVM的内存区域划分以及特征&am…

RedHat宣布支持Azure、.Net Core 2.0和SQL Server 2017

近期&#xff0c;Microsoft和RedHat宣布支持在Red Hat OpenShift上运行Windows容器。此次宣布所针对的主要场景&#xff0c;是让Linux和Windows容器工作于同一集群中。这将使具有混杂环境的企业无需分别运行Windows集群和Linux集群&#xff0c;企业可以迁移到基于容器的同一种架…

安装webpack

全局安装 npm install -g webpack 项目中安装 npm install --save-dev webpack 安装webpack遇到个坑&#xff0c;问题的话应该是项目使用的是webpack2.X版本&#xff0c;这样就会覆盖之前的版本&#xff0c;导致项目配置错误。 所以最好不要用全局安装 cd进相关文件夹后 cnpm …

2017中国开源年会(COSCon'17) 报名正式开启

继成功举办了2015年中国开源年会暨阿帕奇中国路演&#xff0c;及2016年中国开源年会之后&#xff0c;开源社再接再厉主办的2017中国开源年会 (COSCon17-China Open Source Conference 2017) 将于今年11月18-19日&#xff08;周六-周日&#xff09;在上海交大闵行校区陈瑞球楼举…

ERROR in multi ./src/main.js dist/bundle.js

原命令 webpack .\src\main.js .\dist\bundle.js 报错 ERROR in multi ./src/main.js ./dist/bundle.js Module not found: Error: Can’t resolve ‘.\dist\bundle.js’ in ‘C:\Users\Tecna1205\Desktop\vue\webpack-study’ multi ./src/main.js ./dist/bundle.js main[1] …

从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

Github源码地址&#xff1a;https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 前三部分弄完&#xff0c;我们已经可以对内存数据进行CRUD的基本操作&#xff0c;并且可以在asp.net core 2中集成Nlog了。 下面继续&#xff1a; Ent…

spring cloud+dotnet core搭建微服务架构:配置中心(四)

前言 我们项目中有很多需要配置的地方&#xff0c;最常见的就是各种服务URL地址&#xff0c;这些地址针对不同的运行环境还不一样&#xff0c;不管和打包还是部署都麻烦&#xff0c;需要非常的小心。一般配置都是存储到配置文件里面&#xff0c;不管多小的配置变动&#xff0c;…