Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果
本文實(shí)例講述了Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果。分享給大家供大家參考。具體如下:
1. java代碼:
package ttt; import java.io.File; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TreeItem; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.stage.Stage; import javafx.scene.control.TreeView; import javafx.scene.control.cell.PropertyValueFactory; public class TreeViews extends Application { public static ObservableList<FileDetail> data = FXCollections.observableArrayList(); public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Javafx 實(shí)現(xiàn)\"我的電腦\"資源管理器"); TreeItem<File> rootItem = new TreeItem<>(new File(System.getenv("COMPUTERNAME"))); for (File file : File.listRoots()) { FileTreeItem rootsitem = new FileTreeItem(file); rootItem.getChildren().add(rootsitem); } TreeView<File> tree = new TreeView<File>(rootItem); HBox root = new HBox(); TableView<FileDetail> tableView = new TableView<>(data); TableColumn<FileDetail, String> firstColumn = new TableColumn<>("文件"); firstColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("FileName")); firstColumn.setPrefWidth(120); TableColumn<FileDetail, String> secondColumn = new TableColumn<>("類型"); secondColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("type")); secondColumn.setPrefWidth(120); TableColumn<FileDetail, String> thirdColumn = new TableColumn<>("最后修改"); thirdColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("LastModified")); thirdColumn.setPrefWidth(200); tableView.getColumns().setAll(firstColumn, secondColumn, thirdColumn); HBox.setHgrow(tree, Priority.ALWAYS); HBox.setHgrow(tableView, Priority.ALWAYS); root.getChildren().addAll(tree,tableView); tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<File>>() { @Override public void changed(ObservableValue<? extends TreeItem<File>> observable, TreeItem<File> oldValue, TreeItem<File> newValue) { ObservableList<TreeItem<File>> treelist = newValue.getChildren(); ObservableList<FileDetail> tablelist = FXCollections.observableArrayList(); for (TreeItem<File> item : treelist) { FileDetail filedetail = new FileDetail(item.getValue()); tablelist.add(filedetail); } data.setAll(tablelist); } }); primaryStage.setScene(new Scene(root)); primaryStage.setHeight(600); primaryStage.show(); } }
2. java代碼:
package ttt; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; public class FileDetail { private String FileName; private String LastModified; private boolean isFile; private boolean isFolder; private boolean exists; private String type; private long length; private SimpleDateFormat fmt; public FileDetail(File file) { isFile = file.isFile(); isFolder = file.isDirectory(); exists = file.exists(); if (exists) { this.FileName = file.getName(); fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date date = new Date(file.lastModified()); this.LastModified = fmt.format(date); this.length = file.length(); if (isFolder) { this.type = "Folder"; } else this.type = String.valueOf(this.length / (long) 1024) + "KB"; } } public String getFileName() { return FileName; } public void setFileName(String fileName) { FileName = fileName; } public String getLastModified() { return LastModified; } public void setLastModified(String lastModified) { LastModified = lastModified; } public String getType() { return type; } public void setType(String type) { this.type = type; } public long getLength() { return length; } public void setLength(long length) { this.length = length; } }
3. java代碼:
package ttt; import java.io.File; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.TreeItem; public class FileTreeItem extends TreeItem<File> { private boolean isLeaf; private boolean isFirstTimeChildren = true; private boolean isFirstTimeLeaf = true; public FileTreeItem(File file) { super(file); } @Override public ObservableList<TreeItem<File>> getChildren() { if (isFirstTimeChildren) { isFirstTimeChildren = false; super.getChildren().setAll(buildChildren(this)); } return super.getChildren(); } @Override public boolean isLeaf() { if (isFirstTimeLeaf) { isFirstTimeLeaf = false; File f = (File) getValue(); isLeaf = f.isFile(); } return isLeaf; } private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) { File f = TreeItem.getValue(); if (f != null && f.isDirectory()) { File[] files = f.listFiles(); if (files != null) { ObservableList<TreeItem<File>> children = FXCollections.observableArrayList(); for (File childFile : files) { children.add(new FileTreeItem (childFile)); } return children; } } return FXCollections.emptyObservableList(); } }
4. 運(yùn)行效果截圖:
希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- 初步了解javafx
- javafx tableview鼠標(biāo)觸發(fā)更新屬性詳解
- Java8新特性之JavaFX 8_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解
- JavaFX Application應(yīng)用實(shí)例
- 利用JavaFX工具構(gòu)建Reactive系統(tǒng)
- 基于socket和javaFX簡(jiǎn)單文件傳輸工具
- JavaFX之TableView的使用詳解
- javafx實(shí)現(xiàn)圖片3D翻轉(zhuǎn)效果方法實(shí)例
- 詳解JavaFX桌面應(yīng)用開發(fā)-Group(容器組)
相關(guān)文章
解決idea中maven項(xiàng)目無端顯示404錯(cuò)誤的方法
這篇文章主要介紹了解決idea中maven項(xiàng)目無端顯示404錯(cuò)誤的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12MyBatis中XML 映射文件中常見的標(biāo)簽說明
這篇文章主要介紹了MyBatis中XML 映射文件中常見的標(biāo)簽說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法【兩種方法】
這篇文章主要介紹了spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法,主要給大家介紹Jackson和FastJson兩種方式,每一種方法給大家介紹的都非常詳細(xì),需要的朋友可以參考下2018-08-08解決IDEA2020.2插件lombok報(bào)錯(cuò)問題(親測(cè)有效)
這篇文章主要介紹了解決IDEA2020.2插件lombok報(bào)錯(cuò)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08SWT(JFace)體驗(yàn)之打開多個(gè)Form
SWT(JFace)體驗(yàn)之打開多個(gè)Form的實(shí)現(xiàn)代碼。2009-06-06