本文实例讲述了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. 运行效果截图:
希望本文所述对大家的java程序设计有所帮助。