日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

JavaFX仿windows文件管理器目录树

發布時間:2023/12/3 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);}}

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的JavaFX仿windows文件管理器目录树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。