2017-09-18 3 views
-2

Ich muss eine Phase an meinen Filechooser in der Controller-Klasse übergeben.Controller in Java FX zur Verwendung in Dateiauswahl einstellen - gleiche Stufe für Controller und Hauptklasse

Dafür muss ich einen Controller in meiner MainDesignClass setzen.

Was ist hier falsch:

@Override 
public void start(Stage primaryStage) throws Exception{ 
FXMLLoader loader= new FXMLLoader(getClass().getResources("myfxml.fxml"); 
Parent root =(Parent)loader.load(); 

primaryStage = new Stage(); 
Controller myController=loader.getController(); 
myController.setStage(primaryStage); 
primaryStage.setTitle("myapp"); 
primaryStage.getIcons().add(image); 
primaryStage.setScene(new Scene(root,900,600)); 
primaryStage.show(); 
    } 

setStage rot markiert ist. Aber warum? Warum kann es die Methode nicht finden? Wie kann ich FileChooser dann in meiner Controller.class verwenden?

+0

Was ist Ihr 'Controller' Klassencode? – Kerry

+0

FileChooser chooser = new FileChooser(); Datei file = choooser.showOpenDialog (MainDesign.primaryStage); –

+0

Ich meinte, können Sie bitte die _whole_ Klasse Controller. Ich nehme an, es ist die Zeile 'myController.setStage (primaryStage);' gibt den Kompilierungsfehler? – Kerry

Antwort

0

Controller verwenden Sie es in Ihrem FXML Datei in einem übergeordneten Objekt festlegen müssen, wie dieses <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="157.0" prefWidth="430.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controllers.Controller">

+0

das beantwortet meine Frage nicht, da ich es bereits in der fxml-Datei eingestellt habe und ich die Stufe an den Controller übergeben muss, um es in meinem FileChooser verwenden zu können, möchte ich die gleiche Stufe und es weitergeben funktioniert nicht und es gibt einige Fehler. –

+0

Wenn Sie die aktuelle Stage abrufen möchten, versuchen Sie es mit Stage stage = (Stage) choooser.getScene(). GetWindow(); – Symph

+0

dies funktioniert nicht, da der Controller und der MainGUi nicht in der gleichen Klasse sind –

0

Ok, ich habe dieses Problem gelöst:

Hauptklasse

public class Main extends Application { 

private static Stage primaryStage; // Declare static Stage, so it can also be accessed in the controller and if you walk through Files! 

private void setPrimaryStage(Stage stage) { 
    Main.primaryStage = stage; 
} 

static public Stage getPrimaryStage() { 
    return Main.primaryStage; 
} 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    setPrimaryStage(primaryStage); // **Set the Stage** 

//get new instance of FXMLLoader 
     FXMLLoader loader= new FXMLLoader(getClass().getResources("myfxml.fxml"); 
     Parent root =(Parent)loader.load(); 
     primaryStage.setTitle("Hello World"); 
     primaryStage.setScene(new Scene(root, 300, 275)); 
     primaryStage.show(); 
    } 
} 

instanceofmain .getPrimaryStage()

In Co ntroller Klasse

public class Controller { 

private Main mymainclass; //you need an instance of the main class to open the stage on this very instance, as it is static you will be able to get it then. 

public void onMouseClickAction(ActionEvent e) { 
    Stage s = mymainclass.getPrimaryStage(); 
    // do not apply any close actions, as you want to stay on the same stage 

FileChooser chooser= new Filechooser(); 
File defaultfile = chooser.showOpenDialog(s); // for directories the command is showDialog(s); 
    } 
    } 

Es gab keine andere Threads zu meinem speziellen Problem zu tun hat.

Verwandte Themen