Javafx简单实现【我的电脑资源管理器】效果

时间:2021-05-20

本文实例讲述了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程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章