表示目录的JavaFX
我正在用Java构建一个应用程序,在这个应用程序中,我需要在窗口中的任何类型的视图中表示预定义的目录。想象一下,像备份应用程序一样,主窗口显示特定目录下的所有文件 有没有一种方法可以使用JavaFX做到这一点?我不在乎文件是否真的会显示为树或图标或任何东西 谢谢 编辑:到目前为止,我一直在尝试,但没有成功。这是我的控制器类:表示目录的JavaFX,javafx,directory,treeview,Javafx,Directory,Treeview,我正在用Java构建一个应用程序,在这个应用程序中,我需要在窗口中的任何类型的视图中表示预定义的目录。想象一下,像备份应用程序一样,主窗口显示特定目录下的所有文件 有没有一种方法可以使用JavaFX做到这一点?我不在乎文件是否真的会显示为树或图标或任何东西 谢谢 编辑:到目前为止,我一直在尝试,但没有成功。这是我的控制器类: import javafx.scene.control.*; import java.io.IOException; public class ViewControll
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");
}
}
我的fxml包含:
我编写了一个简短的程序,显示用户选择的文件和目录树 结果: 工作原理: 当用户单击“加载文件夹”按钮时,
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;
}
}
导入java.io.File;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Alert;
导入javafx.scene.control.Alert.AlertType;
导入javafx.scene.control.Button;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.DirectoryChooser;
导入javafx.stage.stage;
公共类DirectoryViewer扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
TreeView a=新的TreeView();
BorderPane b=新的BorderPane();
按钮c=新按钮(“加载文件夹”);
c、 setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
DirectoryChooser dc=新的DirectoryChooser();
setInitialDirectory(新文件(System.getProperty(“user.home”));
文件选择=dc.showDialog(primaryStage);
if(choice==null | |!choice.isDirectory()){
Alert Alert=新警报(AlertType.ERROR);
alert.setHeaderText(“无法打开目录”);
setContentText(“文件无效”);
alert.showAndWait();
}否则{
a、 setRoot(getNodesForDirectory(choice));
}
}
});
b、 机顶盒(c);
b、 设置中心(a);
初级舞台。背景场景(新场景(b,600400));
setTitle(“文件夹视图”);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
public TreeItem getNodesForDirectory(File directory){//返回指定目录的TreeItem表示形式
TreeItem root=newtreeitem(directory.getName());
对于(文件f:directory.listFiles()){
System.out.println(“加载”+f.getName());
如果(f.isDirectory()){//,则递归调用该函数
root.getChildren().add(getNodesForDirectory(f));
}否则{
root.getChildren().add(新树项(f.getName());
}
}
返回根;
}
}
祝你的项目好运 我编写了一个简短的程序,显示用户选择的文件和目录树 结果: 工作原理: 当用户单击“加载文件夹”按钮时,
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;
}
}
导入java.io.File;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Alert;
导入javafx.scene.control.Alert.AlertType;
导入javafx.scene.control.Button;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.DirectoryChooser;
导入javafx.stage.stage;
公共类DirectoryViewer扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
TreeView a=新的TreeView();
BorderPane b=新的BorderPane();
按钮c=新按钮(“加载文件夹”);
c、 setOnAction(新的EventHandler(){
@重写公共无效句柄(ActionEvent e){
DirectoryChooser dc=新的DirectoryChooser();
setInitialDirectory(新文件(System.getProperty(“user.home”));
文件选择=dc.showDialog(primaryStage);
if(choice==null | |!choice.isDirectory()){
Alert Alert=新警报(AlertType.ERROR);
alert.setHeaderText(“无法打开目录”);
setContentText(“文件无效”);
alert.showAndWait();
}否则{
a、 setRoot(getNodesForDirectory(choice));
}
}
});
b、 机顶盒(c);
b、 设置中心(a);
初级舞台。背景场景(新场景(b,600400));
setTitle(“文件夹视图”);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
public TreeItem getNodesForDirectory(File directory){//返回指定目录的TreeItem表示形式
TreeItem root=newtreeitem(directory.getName());
对于(文件f:directory.listFiles()){
System.out.println(“加载”+f.getName());
如果(f.isDirectory()){//,则递归调用该函数
root.getChildren().add(getNodesForDirectory(f));
}否则{
root.getChildren().add(新树项(f.getName());
}
}
返回根;
}
}
祝你的项目好运 你的问题不是很清楚。您是否询问是否有预定义的文件查看器(an)