[Java] JTree文件浏览 →→→→→进入此内容的聊天室

来自 , 2019-04-15, 写在 Java, 查看 118 次.
URL http://www.code666.cn/view/89f03f7d
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package yan.t2;
  7.  
  8. import java.io.File;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Date;
  11.  
  12. public class FileDetail {
  13.  
  14.     private String FileName;
  15.     private String LastModified;
  16.     private boolean isFile;
  17.     private boolean isFolder;
  18.     private boolean exists;
  19.     private String type;
  20.     private long length;
  21.     private SimpleDateFormat fmt;
  22.  
  23.     public FileDetail(File file) {
  24.         isFile = file.isFile();
  25.         isFolder = file.isDirectory();
  26.         exists = file.exists();
  27.         if (exists) {
  28.             this.FileName = file.getName();
  29.             fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  30.             Date date = new Date(file.lastModified());
  31.             this.LastModified = fmt.format(date);
  32.             this.length = file.length();
  33.             if (isFolder) {
  34.                 this.type = "Folder";
  35.             } else {
  36.                 this.type = String.valueOf(this.length / (long) 1024) + "KB";
  37.             }
  38.         }
  39.     }
  40.  
  41.     public String getFileName() {
  42.         return FileName;
  43.     }
  44.  
  45.     public void setFileName(String fileName) {
  46.         FileName = fileName;
  47.     }
  48.  
  49.     public String getLastModified() {
  50.         return LastModified;
  51.     }
  52.  
  53.     public void setLastModified(String lastModified) {
  54.         LastModified = lastModified;
  55.     }
  56.  
  57.     public String getType() {
  58.         return type;
  59.     }
  60.  
  61.     public void setType(String type) {
  62.         this.type = type;
  63.     }
  64.  
  65.     public long getLength() {
  66.         return length;
  67.     }
  68.  
  69.     public void setLength(long length) {
  70.         this.length = length;
  71.     }
  72. }
  73.  
  74. /*
  75.  * To change this license header, choose License Headers in Project Properties.
  76.  * To change this template file, choose Tools | Templates
  77.  * and open the template in the editor.
  78.  */
  79. package yan.t2;
  80.  
  81. import java.io.File;
  82. import javafx.collections.FXCollections;
  83. import javafx.collections.ObservableList;
  84. import javafx.scene.control.TreeItem;
  85.  
  86. public class FileTreeItem extends TreeItem<File> {
  87.  
  88.     private boolean isLeaf;
  89.     private boolean isFirstTimeChildren = true;
  90.     private boolean isFirstTimeLeaf = true;
  91.  
  92.     public FileTreeItem(File file) {
  93.         super(file);
  94.     }
  95.  
  96.     @Override
  97.     public ObservableList<TreeItem<File>> getChildren() {
  98.         if (isFirstTimeChildren) {
  99.             isFirstTimeChildren = false;
  100.             super.getChildren().setAll(buildChildren(this));
  101.         }
  102.         return super.getChildren();
  103.     }
  104.  
  105.     @Override
  106.     public boolean isLeaf() {
  107.         if (isFirstTimeLeaf) {
  108.             isFirstTimeLeaf = false;
  109.             File f = (File) getValue();
  110.             isLeaf = f.isFile();
  111.         }
  112.         return isLeaf;
  113.     }
  114.  
  115.     private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
  116.         File f = TreeItem.getValue();
  117.         if (f != null && f.isDirectory()) {
  118.             File[] files = f.listFiles();
  119.             if (files != null) {
  120.                 ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
  121.                 for (File childFile : files) {
  122.                     children.add(new FileTreeItem(childFile));
  123.                 }
  124.                 return children;
  125.             }
  126.         }
  127.         return FXCollections.emptyObservableList();
  128.     }
  129. }
  130.  
  131.  
  132. /*
  133.  * To change this license header, choose License Headers in Project Properties.
  134.  * To change this template file, choose Tools | Templates
  135.  * and open the template in the editor.
  136.  */
  137. package yan.t2;
  138.  
  139. import java.io.File;
  140. import javafx.application.Application;
  141. import javafx.beans.value.ChangeListener;
  142. import javafx.beans.value.ObservableValue;
  143. import javafx.collections.FXCollections;
  144. import javafx.collections.ObservableList;
  145. import javafx.scene.Scene;
  146. import javafx.scene.control.TableColumn;
  147. import javafx.scene.control.TableView;
  148. import javafx.scene.control.TreeItem;
  149. import javafx.scene.layout.HBox;
  150. import javafx.scene.layout.Priority;
  151. import javafx.stage.Stage;
  152. import javafx.scene.control.TreeView;
  153. import javafx.scene.control.cell.PropertyValueFactory;
  154.  
  155. public class TreeViews extends Application {
  156.  
  157.     public static ObservableList<FileDetail> data = FXCollections.observableArrayList();
  158.  
  159.     public static void main(String[] args) {
  160.         launch(args);
  161.     }
  162.  
  163.     @Override
  164.     public void start(Stage primaryStage) {
  165.         primaryStage.setTitle("Javafx 实现\"我的电脑\"资源管理器");
  166.         TreeItem<File> rootItem = new TreeItem<>(new File(System.getenv("COMPUTERNAME")));
  167.         for (File file : File.listRoots()) {
  168.             FileTreeItem rootsitem = new FileTreeItem(file);
  169.             rootItem.getChildren().add(rootsitem);
  170.         }
  171.         TreeView<File> tree = new TreeView<File>(rootItem);
  172.         HBox root = new HBox();
  173.         TableView<FileDetail> tableView = new TableView<>(data);
  174.         TableColumn<FileDetail, String> firstColumn = new TableColumn<>("文件");
  175.         firstColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("FileName"));
  176.         firstColumn.setPrefWidth(120);
  177.         TableColumn<FileDetail, String> secondColumn = new TableColumn<>("类型");
  178.         secondColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("type"));
  179.         secondColumn.setPrefWidth(120);
  180.         TableColumn<FileDetail, String> thirdColumn = new TableColumn<>("最后修改");
  181.         thirdColumn.setCellValueFactory(new PropertyValueFactory<FileDetail, String>("LastModified"));
  182.         thirdColumn.setPrefWidth(200);
  183.         tableView.getColumns().setAll(firstColumn, secondColumn, thirdColumn);
  184.         HBox.setHgrow(tree, Priority.ALWAYS);
  185.         HBox.setHgrow(tableView, Priority.ALWAYS);
  186.         root.getChildren().addAll(tree, tableView);
  187.         tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<File>>() {
  188.             @Override
  189.             public void changed(ObservableValue<? extends TreeItem<File>> observable, TreeItem<File> oldValue, TreeItem<File> newValue) {
  190.                 ObservableList<TreeItem<File>> treelist = newValue.getChildren();
  191.                 ObservableList<FileDetail> tablelist = FXCollections.observableArrayList();
  192.                 for (TreeItem<File> item : treelist) {
  193.                     FileDetail filedetail = new FileDetail(item.getValue());
  194.                     tablelist.add(filedetail);
  195.                 }
  196.                 data.setAll(tablelist);
  197.             }
  198.         });
  199.         primaryStage.setScene(new Scene(root));
  200.         primaryStage.setHeight(600);
  201.         primaryStage.show();
  202.     }
  203. }
  204.  

回复 "JTree文件浏览"

这儿你可以回复上面这条便签

captcha