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

时间:2022-08-30 21:00:42

本文实例讲述了Javafx简单实现【我的电脑资源管理器】效果。分享给大家供大家参考。具体如下:

1. java代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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. 运行效果截图:

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

希望本文所述对大家的java程序设计有所帮助。