-1
votes

Obtenir le contrôleur de FXMLLoader ouvert

Je crée une application Java FX. Est-il possible d'obtenir un contrôleur déjà ouvert la fenêtre dans l'application JavaFX.Proflure de l'application de l'application, mais lorsque j'ai ouvert d'autres modalwindow pour entrer des données et enfin, j'ai entré toutes les données et cliqué sur le bouton enregistré. ModalWindow devrait être disséquée et le milieu habituel doit être rafraîchi. Je voulais le faire appeler des parents Controller l'appelant de contrôleur d'enfants. Mais je reçois des erreurs tout en le faisant. D'autres suggestions seraient utiles.

 if(new HttpRequests().departPost(jsonObject))
        {
            info.setStyle("-fx-text-fill: green");
            info.setText(myResourceBundle.getString("infoSave"));
            FXMLLoader fxmlLoader = new FXMLLoader();
            fxmlLoader.setLocation(getClass().getResource(FxmlViews.MainScreen.mainSc));
            try
            {
                AnchorPane frame = fxmlLoader.load();
                MainScreenController mainScreenController = (MainScreenController)fxmlLoader.getController();
                mainScreenController.updateTable(myResourceBundle);
            } catch (IOException e)
            {
                e.printStackTrace();
            }
            success = true;
        }


1 commentaires

Essayez ce qui se passe-t-il si vous changez l'argument de la FXMLLOader.SetLocation ... à ... .GetResource (/fxmlviews/mainscreen/mainsc.fxml):


3 Réponses :


0
votes

Quand je regarde la standingTrace, je trouve que cela ne se plaint pas de la création du contrôleur.

Il se plaint de ne pas charger le fichier FXML en premier lieu. Cela ne peut pas le trouver. Donc, il abandonne - avant même de toucher la ligne où vous souhaitez charger le contrôleur (cette ligne a l'air bien):

Exception dans le thread "Fil d'application Javafx" java.lang.illegalStateException: l'emplacement n'est pas défini. à javafx.fxml.fxmlloader.loadimpl (fxmlloader.java:2428) à javafx.fxml.fxmlloader.load (fxmlloader.java:2403)

Vous voudrez peut-être regarder plus près de la valeur de "fxmlviews.mainscreen.mainsc". Il pointe très probablement d'un mauvais chemin.

Exemple de chargement d'un contuleur deux fois: xxx


3 commentaires

Merci monsieur pour répondre. Oui, vous êtes totalement vrai ici. Vous ne pouvez pas charger FXML qui est déjà ouvert .Qu'est-ce que je pouvais faire ici pour le charger correctement et le rouvrir Agian ou ce que vous allez me suggérer?


J'ai édité ma réponse ci-dessus et j'ai ajouté du code qui se charge parfaitement. Opener un fichier FXML à plusieurs reprises ne devrait pas être un problème du tout! Plus votre code se plaint, qu'il ne peut pas trouver le fichier FXML. Il dit que l'emplacement du fichier est faux. Il regarde le mauvais endroit.


Peut-être que je comprends mieux, si vous pouviez me dire ce qui vous fait croire que la raison de l'erreur est que le fichier est déjà ouvert ou que le contrôleur était déjà chargé? (Je ne peux pas voir ça de votre message)



0
votes

L'API JavaFX ne vous permet que d'obtenir des références sur des commandes via la méthode FXMLLOader.load (). Avec une instance de FXMLLoader, vous pouvez faire quelque chose comme ceci (comme vous le faites déjà :-)):

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("MainForm.fxml"));
Parent root = (Parent) loader.load();

// as soon as the load() method has been invoked, the scene graph and the 
// controller instance are availlable:
MainFormController controller = loader.getController();


1 commentaires

Merci monsieur pour répondre. Mais il donne toujours des erreurs précédentes. Je ne charge pas la parente FXML parent une fois de plus de temps parce qu'elle est déjà ouverte



0
votes

Voici un contrôleur qui remplace lui-même d'un fichier FXML. C'est simple et n'a que le seul bouton unique qui déclenche le remplacement, mais qu'il fait. La scène, la scène et le contrôleur sont stockés comme variables statiques, pour tout garder dans un fichier. Vous pouvez les stocker de couse partout où vous voulez sinon vous voulez.

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane id="AnchorPane" prefHeight="151.0" prefWidth="232.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1" fx:controller="fxControls.RootReplacingItselfController">
   <children>
      <Button layoutX="76.0" layoutY="76.0" mnemonicParsing="false" onAction="#replaceme" text="replaceme" />
   </children>
</AnchorPane>


2 commentaires

S'il vous plaît ne postez pas plusieurs réponses, modifiez plutôt une et ajoutez le contenu de la seconde.


Je suppose que tu as raison. La raison était que l'OP a deux questions: "Que je puisse faire ici pour le charger correctement fermer et rouvrir" et l'autre est l'erreur des spectacles StackTrace.