Daten von Controller zu Controller übertragen

wolfin96

Mitglied
Hallo miteinander! Ich möchte bei meinem Programm zuerst ein Startfenster öffnen, wo etwas in ein TextField eingegeben werden soll und wenn dann auf den Button gedrückt wird, soll sich das Hauptfenster öffnen und ein entsprechendes Label soll den String aus dem TextField des Startfensters anzeigen. Wenn ich nun das Programm starte und etwas in das Textfield eingebe und auf den Button drücke erhalte ich zwei Fehler:
Caused by: java.lang.NullPointerException
at application.HauptfensterController.setzeMaxgewicht(HauptfensterController.java:7)
at application.StartfensterController.changeScreen(StartfensterController.java:41)
... 58 more

Der Knackpunkt scheint die Übergabe der im Textfield im Startfenster eingegeben Daten zu sein...
Vielleicht könnt ihr mir ja dabei weiterhelfen? Vielen Dank schonmal!

Hier einmal der Controller vom Startfenster:
Java:
public class StartfensterController implements Initializable {

   

    @FXML TextField maxGewichtT;

   

    /**

     * @param event

     * @throws Exception

     * Methode um zum Hauptfenster zu gelangen und das eingegebene Maximalgewicht zu übergeben

     */

    public void changeScreen(ActionEvent event) throws Exception {      

       

        //Laden des FXML Dokuments, welches das nächste Fenster darstellt

        FXMLLoader loader = new FXMLLoader();

        loader.setLocation(getClass().getResource("Hauptfenster.fxml"));

        Parent root = loader.load();

       

        Scene hauptfenster = new Scene(root);

       

        //Uebertragend er Daten an das Hauptfenster

        HauptfensterController hauptController = loader.getController();

        hauptController.setzeMaxgewicht(maxGewichtT.getText());

       

        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();

       

        window.setScene(hauptfenster);

        window.show();

           

    }

   

            @Override

    public void initialize(URL location, ResourceBundle resources) {

        // TODO Auto-generated method stub

       

    }

       

    }

Und hier einmal der Controller vom Hauptfenster:
Java:
public class HauptfensterController implements Initializable  {
    //noch mit eingegeben Maxgewicht aus Startfenster verknüpfen!!
    @FXML private Label maxGewichtLabel;
   

//hier sollen die im Startfenster eingegebenen Daten an das Label übergeben werden 
    public void setzeMaxgewicht(String daten) {
         maxGewichtLabel.setText(daten.toString());
    }
}
 
du musst erstmal an das label aus dem xml ran kommen @xml glaub ich macht das mit der ID des elements und von dem dann .getText() und die Methode dann mit dem String aufrufen
 
du musst erstmal an das label aus dem xml ran kommen @xml glaub ich macht das mit der ID des elements und von dem dann .getText() und die Methode dann mit dem String aufrufen
Das war zwar nicht die Lösung des Problems, aber das hat mich darauf gebracht mal die Sichtbarkeit der beiden Label auf public zu ändern, das hat es dann gelöst. Danke!
 
Wenn das Hauptfenster.xml den HauptfensterController (fx:controller) angibt, dann werden beim Laden die annotierten Instanzvariablen gesetzt; da muss nix public sein, lediglich der Variablenname und die fx:id müssen zusammenpassen. Initializable muss der Controller auch nicht implementieren. Folgendes sollte also genügen:
Java:
public class HauptfensterController {
    @FXML private Label maxGewichtLabel;
  
    public void setzeMaxgewicht(String daten) {
         maxGewichtLabel.setText(daten.toString());
    }
}
 
Hallo miteinander! Ich möchte bei meinem Programm zuerst ein Startfenster öffnen, wo etwas in ein TextField eingegeben werden soll und wenn dann auf den Button gedrückt wird, soll sich das Hauptfenster öffnen und ein entsprechendes Label soll den String aus dem TextField des Startfensters anzeigen. Wenn ich nun das Programm starte und etwas in das Textfield eingebe und auf den Button drücke erhalte ich zwei Fehler:
Caused by: java.lang.NullPointerException
at application.HauptfensterController.setzeMaxgewicht(HauptfensterController.java:7)
at application.StartfensterController.changeScreen(StartfensterController.java:41)
... 58 more

Der Knackpunkt scheint die Übergabe der im Textfield im Startfenster eingegeben Daten zu sein...
Vielleicht könnt ihr mir ja dabei weiterhelfen? Vielen Dank schonmal!

Hier einmal der Controller vom Startfenster:
Java:
public class StartfensterController implements Initializable {

  

    @FXML TextField maxGewichtT;

  

    /**

     * @param event

     * @throws Exception

     * Methode um zum Hauptfenster zu gelangen und das eingegebene Maximalgewicht zu übergeben

     */

    public void changeScreen(ActionEvent event) throws Exception {     

      

        //Laden des FXML Dokuments, welches das nächste Fenster darstellt

        FXMLLoader loader = new FXMLLoader();

        loader.setLocation(getClass().getResource("Hauptfenster.fxml"));

        Parent root = loader.load();

      

        Scene hauptfenster = new Scene(root);

      

        //Uebertragend er Daten an das Hauptfenster

        HauptfensterController hauptController = loader.getController();

        hauptController.setzeMaxgewicht(maxGewichtT.getText());

      

        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();

      

        window.setScene(hauptfenster);

        window.show();

          

    }

  

            @Override

    public void initialize(URL location, ResourceBundle resources) {

        // TODO Auto-generated method stub

      

    }

      

    }

Und hier einmal der Controller vom Hauptfenster:
Java:
public class HauptfensterController implements Initializable  {
    //noch mit eingegeben Maxgewicht aus Startfenster verknüpfen!!
    @FXML private Label maxGewichtLabel;
  

//hier sollen die im Startfenster eingegebenen Daten an das Label übergeben werden
    public void setzeMaxgewicht(String daten) {
         maxGewichtLabel.setText(daten.toString());
    }
}
Ich bevorzuge an der Stelle entweder Dependency Injection (Spring, Guice) oder EventBus(Guava, GreenRobot).
 

Zurück
Oben