从事件中获取 TextField 中的路径

Get a path in a TextField from an event

我想在我的应用程序中选择一个文件,然后将其路径写入文本字段并将其用作我的主应用程序的变量。 我做了我的界面并添加了一些东西,比如当我按下按钮时我选择了一个文件但我不知道如何获得该路径。 这是我的主要应用程序代码:

package ch.makery.adress;

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.Parent;


public class MainApp extends Application {



    @Override
    public void start(Stage stage) throws Exception {
        Parent parent = FXMLLoader.load(getClass().getResource("PersonOverview.fxml"));
        Scene scene = new Scene(parent);
        stage.setTitle("Appication Extraction et remplissage Excel");
        stage.setScene(scene);
        stage.show();    
}
}

这是我的控制器 class :

package ch.makery.adress;

import java.awt.FileDialog;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
import javax.swing.JFrame;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;

public class HexaController implements Initializable {
       static JFrame fileDialog;
        @FXML
        private ComboBox<String> hexa;
        ObservableList<String> list = FXCollections.observableArrayList();


        @FXML
        private void dar(ActionEvent event){
            FileDialog fd1=new FileDialog(fileDialog,"Choisissez un fichier d'entree",FileDialog.LOAD);
            fd1.setDirectory("C:\");
            fd1.setVisible(true);
            String filename1=fd1.getFile();
            String Directory1=fd1.getDirectory();
            String path1=Directory1 + filename1;
        }

        @FXML
        private void modele(ActionEvent event){
            JFrame parentFrame=new JFrame();
             FileDialog filechooser = new FileDialog (parentFrame, "Choisir un modèle Excel à copier",FileDialog.LOAD);
             filechooser.setDirectory("C:\");
             filechooser.setVisible(true);
             String directory_copy = filechooser.getDirectory();
             String name_copy= filechooser.getFile();
             String path_copy = (directory_copy+name_copy);
        }

        @FXML
        private void sortie (ActionEvent event){
            JFrame parentFrame2=new JFrame();
             FileDialog filechooser2 = new FileDialog (parentFrame2, "Choisir une destination d'enregistrement",FileDialog.SAVE);
             filechooser2.setDirectory("C:\");
             filechooser2.setVisible(true);
             String directory_save = filechooser2.getDirectory();
             String name_save= filechooser2.getFile();
             String path_save = (directory_save+name_save+".xls");
        }
        @FXML
        private void annuler (ActionEvent event){
            System.exit(0);
        }


        @FXML
        private ComboBox<Integer>methode;
        ObservableList<Integer>nombre = FXCollections.observableArrayList();

        @FXML
        private TextField entree;

        @FXML
        private TextField excel;

        @FXML
        private TextField sortie;


public HexaController(){

}

public void initialize(URL url,ResourceBundle rb){

    list.add(new String("OUI"));
    list.add(new String("NON"));
    hexa.setItems(list);
    nombre.add(new Integer(1));
    nombre.add(new Integer(2));
    nombre.add(new Integer(3));
    nombre.add(new Integer(4));
    nombre.add(new Integer(5));
    methode.setItems(nombre);
}
}

接下来我应该怎么做才能让它发挥作用?不知道从哪里开始。 谢谢

因为它是一个 JavaFX 应用程序,我想您将为每个用户启动一个应用程序,这样您就不会遇到内存中共享的全局信息的问题。

i) 第一种方法是在你的 HexaController 中有一个私有的 String latestFilePath ,当用户打开文件时,你可以获取 filePath 并将其传递给 String 字段

String directory_save = filechooser2.getDirectory(); 
String name_save= filechooser2.getFile();
this.latestFilePath = directory_save+name_save;

所以以后你可以在任何你想用的地方使用它,用一个简单的 if 语句来检查它是否为 null

ii) 作为第二种方法,它可以是上述方法的扩展,您可以简单地获取文件路径并将其设置在您的文本字段中

 String filename1=fd1.getFile();
 String Directory1=fd1.getDirectory();
 String path1=Directory1 + filename1;
 entree.setText(path1);