用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月 忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

JTree文件浏览

2017-12-26 作者:yan 举报

[java]代码库

/*
 * 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<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();
    }
}


/*
 * 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<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();
    }
}


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。