Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果
本文實(shí)例講述了Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果。分享給大家供大家參考。具體如下:
1. java代碼:
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 實(shí)現(xiàn)\"我的電腦\"資源管理器");
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代碼:
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代碼:
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. 運(yùn)行效果截圖:

希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。
- 初步了解javafx
- javafx tableview鼠標(biāo)觸發(fā)更新屬性詳解
- Java8新特性之JavaFX 8_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解
- JavaFX Application應(yīng)用實(shí)例
- 利用JavaFX工具構(gòu)建Reactive系統(tǒng)
- 基于socket和javaFX簡(jiǎn)單文件傳輸工具
- JavaFX之TableView的使用詳解
- javafx實(shí)現(xiàn)圖片3D翻轉(zhuǎn)效果方法實(shí)例
- 詳解JavaFX桌面應(yīng)用開發(fā)-Group(容器組)
相關(guān)文章
解決idea中maven項(xiàng)目無端顯示404錯(cuò)誤的方法
這篇文章主要介紹了解決idea中maven項(xiàng)目無端顯示404錯(cuò)誤的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
MyBatis中XML 映射文件中常見的標(biāo)簽說明
這篇文章主要介紹了MyBatis中XML 映射文件中常見的標(biāo)簽說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法【兩種方法】
這篇文章主要介紹了spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法,主要給大家介紹Jackson和FastJson兩種方式,每一種方法給大家介紹的都非常詳細(xì),需要的朋友可以參考下2018-08-08
解決IDEA2020.2插件lombok報(bào)錯(cuò)問題(親測(cè)有效)
這篇文章主要介紹了解決IDEA2020.2插件lombok報(bào)錯(cuò)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
SWT(JFace)體驗(yàn)之打開多個(gè)Form
SWT(JFace)體驗(yàn)之打開多個(gè)Form的實(shí)現(xiàn)代碼。2009-06-06

