从事件中获取TextField中的路径

时间:2015-09-01 08:50:10

标签: java javafx fxml scenebuilder

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

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();    
}
}

这是我的控制器类:

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);
}
}

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

1 个答案:

答案 0 :(得分:0)

因为它是一个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)作为第二种方法,可以是上述方法的扩展,您可以简单地使用filePath并将其设置在文本字段

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