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作为注册中心的方法

    本文主要介绍了SpringBoot项目改为SpringCloud项目使用nacos作为注册中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Springboot实现通用Auth认证的几种方式

    Springboot实现通用Auth认证的几种方式

    本文主要介绍了Springboot实现通用Auth认证的几种方式,主要介绍了4种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java 数据结构与算法系列精讲之背包问题

    Java 数据结构与算法系列精讲之背包问题

    背包问题是一个非常典型的考察动态规划应用的题目,对其加上不同的限制和条件,可以衍生出诸多变种,若要全面理解动态规划,就必须对背包问题了如指掌
    2022-02-02
  • Java多线程知识点全面总结

    Java多线程知识点全面总结

    这篇文章主要介绍了Java多线程知识点全面总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java中的StampedLock实现原理详解

    Java中的StampedLock实现原理详解

    这篇文章主要介绍了Java中的StampedLock实现原理详解,ReentrantReadWriteLock采用悲观读,第一个读线程拿到锁后,第二个/第三个读线程可以拿到锁,特别是在读线程很多,写线程很少时,需要的朋友可以参考下
    2024-01-01
  • Java中集合List、Set和Map的入门详细介绍

    Java中集合List、Set和Map的入门详细介绍

    Java集合主要分为三种类型:Set(集)、List(列表)和Map(映射),下面这篇文章主要给大家介绍了关于Java中集合List、Set和Map的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • Java File类的详解及简单实例

    Java File类的详解及简单实例

    这篇文章主要介绍了Java File类的详解及简单实例的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • SpringMVC文件上传的配置实例详解

    SpringMVC文件上传的配置实例详解

    本文通过实例代码给大家介绍SpringMVC文件上传的配置相关内容,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • MyBatisPlus使用@TableField注解处理默认填充时间的问题

    MyBatisPlus使用@TableField注解处理默认填充时间的问题

    这篇文章主要介绍了MyBatisPlus使用@TableField注解处理默认填充时间的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 利用SpringMVC接收复杂对象和多个文件(前端使用JQuery)

    利用SpringMVC接收复杂对象和多个文件(前端使用JQuery)

    这篇文章主要介绍了利用SpringMVC接收复杂对象和多个文件(前端使用JQuery),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10

最新评论