/* * 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 yan.t2; 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; } } /* * 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 yan.t2; import java.io.File; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.TreeItem; public class FileTreeItem extends TreeItem { private boolean isLeaf; private boolean isFirstTimeChildren = true; private boolean isFirstTimeLeaf = true; public FileTreeItem(File file) { super(file); } @Override public ObservableList> 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> buildChildren(TreeItem TreeItem) { File f = TreeItem.getValue(); if (f != null && f.isDirectory()) { File[] files = f.listFiles(); if (files != null) { ObservableList> children = FXCollections.observableArrayList(); for (File childFile : files) { children.add(new FileTreeItem(childFile)); } return children; } } return FXCollections.emptyObservableList(); } } /* * 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 yan.t2; 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.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 data = FXCollections.observableArrayList(); public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Javafx 实现\"我的电脑\"资源管理器"); TreeItem rootItem = new TreeItem<>(new File(System.getenv("COMPUTERNAME"))); for (File file : File.listRoots()) { FileTreeItem rootsitem = new FileTreeItem(file); rootItem.getChildren().add(rootsitem); } TreeView tree = new TreeView(rootItem); HBox root = new HBox(); TableView tableView = new TableView<>(data); TableColumn firstColumn = new TableColumn<>("文件"); firstColumn.setCellValueFactory(new PropertyValueFactory("FileName")); firstColumn.setPrefWidth(120); TableColumn secondColumn = new TableColumn<>("类型"); secondColumn.setCellValueFactory(new PropertyValueFactory("type")); secondColumn.setPrefWidth(120); TableColumn thirdColumn = new TableColumn<>("最后修改"); thirdColumn.setCellValueFactory(new PropertyValueFactory("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>() { @Override public void changed(ObservableValue> observable, TreeItem oldValue, TreeItem newValue) { ObservableList> treelist = newValue.getChildren(); ObservableList tablelist = FXCollections.observableArrayList(); for (TreeItem item : treelist) { FileDetail filedetail = new FileDetail(item.getValue()); tablelist.add(filedetail); } data.setAll(tablelist); } }); primaryStage.setScene(new Scene(root)); primaryStage.setHeight(600); primaryStage.show(); } }