J'utilise le code ci-dessous pour transmettre l'information, mais j'aimerais connaître d'autres façons. Dans la méthode de gestionnaire d'événement handleSubmitButtonAction de FXMLDocumentController, je crée une autre fenêtre chargeant le fichier MainFXML. Après cela, je reçois son contrôleur et envoie mes informations à la fenêtre principale. Y a-t-il une meilleure façon de faire cela?Quel est le meilleur moyen de transmettre des informations entre les fenêtres de JavaFX?
public class FXMLDocumentController implements Initializable {
@FXML
private TextField user;
@FXML
public void handleSubmitButtonAction(ActionEvent event) throws IOException {
Alert dialogo = new Alert(Alert.AlertType.INFORMATION, "User: " + user.getText() + " logged in.");
dialogo.showAndWait();
Stage stage2 = (Stage) user.getScene().getWindow();
stage2.close();
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainFXML.fxml"));
Parent root = (Parent) fxmlLoader.load();
MainFXMLController controller = fxmlLoader.<MainFXMLController>getController();
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
controller.setUser(user.getText());
}
Utilisation de l'application en tant qu'instance singleton "controller" dans le sens MVC? Pas joli, mais découble entre les classes de contrôleur FX. –
Je voudrais savoir quel serait le meilleur moyen. Chaque application javafx est MVC dans sa nature en raison du fichier fxml, non? –
La meilleure façon est juste une opinion. Tout le monde peut avoir des opinions différentes. Ainsi, vous pourriez obtenir de nombreuses réponses différentes en fonction des opinions différentes et vous ne seriez pas plus près de déterminer la meilleure façon. Quoi qu'il en soit, IMO, si c'est une grande application, utilise un mécanisme d'injection de dépendances, comme [Gluon Ignite] (http://gluonhq.com/labs/ignite/), rend les objets injectés JavaFX beans avec des propriétés observables et a vos éléments d'interface utilisateur lié ou écouter les changements sur les propriétés. Mais, d'un autre côté, la solution que vous avez dans votre question pourrait être la meilleure pour vous, vous décidez. – jewelsea