Rak*_*kim 0 directory treeview javafx
我正在用Java构建应用程序,需要在我的窗口中以任何视图表示预定义目录。想象一下类似备份应用程序的情况,其中主窗口显示特定目录下的所有文件。
有没有办法使用JavaFX?我不在乎文件是否将显示为树或图标或其他任何东西。
谢谢
编辑:到目前为止我还没有尝试过。这是我的Controller类:
import javafx.scene.control.*;
import java.io.IOException;
public class ViewController {
public ListView listView;
public ViewController() throws IOException {
listView = new ListView();
listView.getItems().addAll("Iron Man", "Titanic", "Contact", "Surrogates");
}
}
Run Code Online (Sandbox Code Playgroud)
而我的fxml包含:
<ListView fx:id="listView" prefHeight="200.0" prefWidth="200.0" />
小智 5
我编写了一个简短的程序,显示用户选择的文件和目录树。
结果:

怎么运行的:
当用户单击“加载文件夹”按钮时,将
getNodesForDirectory被调用,并递归地遍历文件树,沿途生成树项。
这是代码:
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class DirectoryViewer extends Application {
@Override
public void start(Stage primaryStage) {
TreeView<String> a = new TreeView<String>();
BorderPane b = new BorderPane();
Button c = new Button("Load Folder");
c.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
DirectoryChooser dc = new DirectoryChooser();
dc.setInitialDirectory(new File(System.getProperty("user.home")));
File choice = dc.showDialog(primaryStage);
if(choice == null || ! choice.isDirectory()) {
Alert alert = new Alert(AlertType.ERROR);
alert.setHeaderText("Could not open directory");
alert.setContentText("The file is invalid.");
alert.showAndWait();
} else {
a.setRoot(getNodesForDirectory(choice));
}
}
});
b.setTop(c);
b.setCenter(a);
primaryStage.setScene(new Scene(b, 600, 400));
primaryStage.setTitle("Folder View");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
public TreeItem<String> getNodesForDirectory(File directory) { //Returns a TreeItem representation of the specified directory
TreeItem<String> root = new TreeItem<String>(directory.getName());
for(File f : directory.listFiles()) {
System.out.println("Loading " + f.getName());
if(f.isDirectory()) { //Then we call the function recursively
root.getChildren().add(getNodesForDirectory(f));
} else {
root.getChildren().add(new TreeItem<String>(f.getName()));
}
}
return root;
}
}
Run Code Online (Sandbox Code Playgroud)
祝您项目顺利!
| 归档时间: |
|
| 查看次数: |
4611 次 |
| 最近记录: |