本文实例讲述了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程序设计有所帮助。