JavaFX : Passer des paramètres alors que l'instanciation de la classe contrôleur
Je suis en train de travailler sur JavaFX application dès maintenant. Tous mes gui est dans .fxml
format et par classe de contrôleur gère tous les composants GUI. Cependant, j'ai des difficultés avec l'instanciation de la classe contrôleur avant que je charge FXML chargeur. J'ai été incapable de trouver une bonne solution pour ma question sur stackoverflow, ce n'est donc pas une double question.
La raison pour laquelle je suis l'instanciation de la classe contrôleur est que je veux passer certains paramètres de sorte que ces paramètres seront affichés dans l'interface graphique.
Je suis du chargement d'un fichier FXML la manière suivante:
/*
* for Work Order button
*/
@FXML
private void pressWorkOrder() throws Exception{
WorkOrderController wo = new WorkOrderController("ashdkjhsahd"); //instantiating constructor
Parent parent = FXMLLoader.load(getClass().getResource("/fxml/WorkOrder.fxml"));
Scene scene = new Scene(parent);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle("Word Order");
stage.setResizable(false);
stage.show();
}
Et voici mon Contrôleur de classe:
public class WorkOrderController implements Initializable{
@FXML
private Button summary;
private String m,n;
public WorkOrderController(String str) {
//TODO Auto-generated constructor stub
m = str;
}
//for testing
public void set(String str){
m = str;
}
@FXML
public void check(){
System.out.println("Output after constructor was initialized " + m);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
//TODO Auto-generated method stub
}
}
Et je reçois cette Exception:
at javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at MainController.pressWorkOrder(MainController.java:78)
... 57 more
Caused by: java.lang.InstantiationException: WorkOrderController
at java.lang.Class.newInstance(Unknown Source)
at sun.reflect.misc.ReflectUtil.newInstance(Unknown Source)
... 71 more
Caused by: java.lang.NoSuchMethodException: WorkOrderController.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 73 more
- Double Possible de Passage de Paramètres JavaFX FXML
Vous devez vous connecter pour publier un commentaire.
Les deux moyens les plus simples de le faire pour de petites applications sont :
Ne spécifiez pas le
fx:controller
dans le fxml. Créer une instance du contrôleur par le passage des données à et de le passer à la FXMLLoader.Spécifier le
fx:controller
dans le fxml. Récupérer l'instance du contrôleur de la FXMLLoader et de transmettre les données au contrôleur.Suivantes sont des exemples pour le dessus de ladite types. Chacun de l'exemple 3 composantes :
doesn't have
lafx:controller
déclaration pour le premier type et l'a pour le second type.constructor
pour le premier type. Asetter methods
pour le second type.sets the controller to FXMLLoader
. Alors que dans le second, ilfetches the controller from the FXMLLoader
.1. Créer une instance de contrôleur manuellement
FXML - Ne spécifiez pas le fx:contrôleur de
Contrôleur - créer un Constructeur pour accepter les valeurs par défaut
Principal - Créer une instance de Contrôleur, en passant de la valeur, et ensuite passer à la FXMLLoader
2. Récupérer une instance du contrôleur de FXMLLoader
FXML - A indiqué le fx:contrôleur de
Contrôleur - A Setter pour accepter l'entrée
Principal - Récupère l'instance du Contrôleur de FXMLLoader après l'appel de la
load()
, puis appelle le setter pour transmettre des données.