IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

[JavaFX - Gradle] chargement d'une resource FXML dans un autre controller FXML


Sujet :

JavaFX

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2015
    Messages : 77
    Par défaut [JavaFX - Gradle] chargement d'une resource FXML dans un autre controller FXML
    Salut à tous,

    J'essaie de mettre en place un projet JavaFX qui est buildé par l'intermédiaire de Gradle.
    j'essaie d'implémenter le principe d'un controller FXML dédié à ma menuBar qui se chargera LUI de changer le contenu de ma scene ou autres.
    J'ai donc pour cela besoin qu'un controller FXML puisse en charger un autre afin d'obtenir le root Node et l'inseré ou je le souhaite.

    J'arrive à builder et runner l'application sans problème.
    Mais lorsque j'essaie de charger un FXML dans un autre controller FXML c'est toujours une problématique d'url ou de path.

    J'essaie à travers ce controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    package compty.controller;
     
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.layout.BorderPane;
    import java.io.IOException;
     
    public class MainScreenController
    {
        @FXML
        private BorderPane borderPane;
     
        @FXML
        private void handleMenuSimulationAchat(ActionEvent event) throws IOException
        {
            System.out.println("je suis ici 1");
     
            this.displaySimulationAchatScreen();
        }
     
        public void displaySimulationAchatScreen() throws IOException
        {
            FXMLLoader loader = new FXMLLoader();
     
            loader.setLocation(getClass().getClassLoader().getResource("/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getClassLoader().getResource("compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getClassLoader().getResource("/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getClassLoader().getResource("/resources/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getClassLoader().getResource("resources/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getClassLoader().getResource("compty/resources/views/simulationAchat.fxml"));
     
            loader.setLocation(getClass().getResource("/resources/main/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/resources/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/resources/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/resources/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("resources/main/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("resources/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("resources/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("resources/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/main/compty/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/main/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("views/simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("simulationAchat.fxml"));
            loader.setLocation(getClass().getResource("/simulationAchat.fxml"));
     
            Parent root = loader.load();
     
            this.borderPane.setCenter(root);
        }
    de charger le fichier FXML suivant simulationAchat.fxml. J'ai laissé l'ensemble de mes tests visible afin de vous monter toutes mes tentatives infructueuses.
    Je sais que l'url est chargé à l'éxecution et donc à partir de la structure du Jar et non de mon code source.

    Je vous mets l'architecture de mon code source ainsi que de mon Jar compilé.

    Nom : Capture d’écran 2020-09-28 à 16.06.05.png
Affichages : 1023
Taille : 126,1 Ko
    Nom : Capture d’écran 2020-09-29 à 13.46.30.png
Affichages : 995
Taille : 119,5 Ko

    Néanmoins malgré le fait d'essayer des tas de combinaisons d'URL différentes je n'arrive jamais à charger mon fichier FXML.

    D'après la structure de mon code présenté, quel serait d'après vous le bon Path à fournir à la methode getResource() afin d'obtenir ce fameux fichier FXML à travers le FXMLLoader ?

    Voici également mon fichier build.gradle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    plugins {
        id 'application'
        id 'org.openjfx.javafxplugin' version '0.0.9'
    }
     
    java {
        modularity.inferModulePath = true
    }
     
    javafx {
        version = "14"
        modules = [
            'javafx.base',
            'javafx.controls',
            'javafx.fxml'
        ]
    }
     
    sourceSets {
        main {
            resources {
                srcDirs = ["src/main/java"]
                includes = ["**/*.fxml"]
            }
        }
    }
     
    mainClassName = "compty.Main"
     
     
    repositories {
        mavenCentral()
        jcenter()
        google()
    //    flatDir {
    //        dirs 'bin/commons-io-2.7'
    //    }
    }
     
    dependencies {
        implementation 'org.apache.commons:commons-csv:1.8'
    //    implementation fileTree("$rootDir/bin/commons-io-2.7/commons-io-2.7.jar")
        implementation group: 'commons-io', name: 'commons-io', version: '2.8.0'
        implementation 'org.apache.commons:commons-lang3:3.11'
        implementation 'org.openjfx:javafx:16-ea+2'
    }
    Et sinon afin de mieux appréhender et comprendre la philosophie de Java pourriez me dire :
    • La declaration d'un chemin absolue (donc commencant par "/") commence à partir d'ou dans la structure du jar ?
    • Pourquoi le contenu de mon dossier src/main/java/compty/views se retrouve dans le JAR dans le dossier resources
    • les fichiers FXML doivent obligatoirement être considérés comme des resources ? Moi je préférerais les avoir dans un package de même niveau que controller
    • quel serait au final la structure hierarchique de code la plus normé ou conventionnelle pour une application JavaFX ?


    Merci de votre précieux éclairage.
    Images attachées Images attachées   

Discussions similaires

  1. chargement d'une matrice *.m dans un uitable
    Par Gouasmi_moh dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 17/03/2011, 16h10
  2. chargement d'une ligne datatable dans une modelpanel
    Par cyclopsnet dans le forum JSF
    Réponses: 3
    Dernier message: 13/10/2010, 18h26
  3. [GD] Afficher une "resource" image dans un navigateur
    Par AceEye dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/03/2010, 10h59
  4. Detection du chargement d'une nouvelle page dans Firefox
    Par meric dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2008, 16h02
  5. [JAR] Accéder à une resource contenue dans un jar
    Par Blo0d4x3 dans le forum Général Java
    Réponses: 4
    Dernier message: 17/02/2006, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo