Javafx简单实现【我的电脑资源管理器】效果
更新时间:2015年09月21日 12:10:06 作者:21paradox
这篇文章主要介绍了Javafx简单实现【我的电脑资源管理器】效果,涉及Javafx操作系统文件模拟资源管理器的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Javafx简单实现【我的电脑资源管理器】效果。分享给大家供大家参考。具体如下:
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 实现\"我的电脑\"资源管理器"); 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. 运行效果截图:
希望本文所述对大家的java程序设计有所帮助。
相关文章
SpringBoot项目改为SpringCloud项目使用nacos作为注册中心的方法
本文主要介绍了SpringBoot项目改为SpringCloud项目使用nacos作为注册中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-04-04MyBatisPlus使用@TableField注解处理默认填充时间的问题
这篇文章主要介绍了MyBatisPlus使用@TableField注解处理默认填充时间的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01利用SpringMVC接收复杂对象和多个文件(前端使用JQuery)
这篇文章主要介绍了利用SpringMVC接收复杂对象和多个文件(前端使用JQuery),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-10-10
最新评论