首页 > 编程 > Java > 正文

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

2019-11-26 14:59:08
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表