Benutzer-Werkzeuge

Webseiten-Werkzeuge


usercontent:daten_an_fxml-controllerklasse_uebergeben

Daten an FXML-Controllerklasse übergeben

Möchte man beispielsweise eine Meldung über einen FXML-Dialog ausgeben, so kann nach dem laden der FXML-Resource auch direkt in ein beliebiges Control geschrieben werden.

Hier wird in das vorhandene Label im FXML-Dialog geschrieben

Die Funktion root.lookup sucht nach dem entsprechendem Control.

/*
 * (c) http://www.javacode.sought.de/
 */
package javafxdialog;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
 
/**
 *
 * @author (c) http://www.javacode.sought.de/
 */
public class JavaFXDialog extends Application {
 
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDialog.fxml"));
        Label dlabel=(Label) root.lookup("#label");
        if (dlabel!=null) dlabel.setText("Das wird in das Label geschrieben!")  ;      
 
 
        Scene scene = new Scene(root);
 
        stage.setScene(scene);
        stage.show();
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
 
}

Alternativ kann man auch die Controllerklasse ermitteln

/*
 * Datenübergabe an Controllerklasse
 * (c) http://www.javacode.sought.de/
 * 
 */
package javafxdialog;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
/**
 * (c) http://www.javacode.sought.de/
 * 
 */
public class JavaFXDialog extends Application {
 
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader fxmlLoader=new FXMLLoader(getClass().getResource("FXMLDialog.fxml"));
        Parent root = fxmlLoader.load();
 
        FXMLDialogController meinController =(FXMLDialogController) fxmlLoader.getController();
        meinController.datenuebergabe("Dies wird uebergeben");
 
        Scene scene = new Scene(root);
 
        stage.setScene(scene);
        stage.show();
 
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
 
}

Die dazugehörige FXML-Datei sieht so aus:

/*
 * 
 *  (c) http://www.javacode.sought.de/
 * 
 */
package javafxdialog;
 
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
 
/**
 *
 * @author * (c) http://www.javacode.sought.de/
 */
public class FXMLDialogController implements Initializable {
 
    @FXML
    private Label label;
 
    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }
 
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
 
    public void datenuebergabe(String s){
        label.setText(s);
    }
 
}

Beispiel getestet mit Version

ab Java 8 lol

Autor

Siehe auch

usercontent/daten_an_fxml-controllerklasse_uebergeben.txt · Zuletzt geändert: 16/10/2016 01:01 von 217.233.56.51