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 :

Comment faire correspondre des objets FXML dans un tableau d'objet ?


Sujet :

JavaFX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Comment faire correspondre des objets FXML dans un tableau d'objet ?
    Bonjour,

    Je vous explique mon problème concernant FXML, je souhaite créer un tableau de Cellule (une cellule est un objet customisé qui hérite de Région) qui doivent correspondre à des objets existant dans mon fichier FXML.

    Je croyais qu'avec ce bout de code, je pourrais faire la correspondance, mais ce n'est pas le cas ..

    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
     
    @FXML
    Cellule P1;
    @FXML
    Cellule P2;
    @FXML
    Cellule P3;
     
    @FXML
    Cellule tableCelluleMain[] = {P1, P2, P3};
     
    // Par exemple, je souhaite récupérer des informations concernant une cellule dans mon FXML
    for (int i = 0; i < tableCelluleMain.length; i++) {
          System.out.println(tableCelluleMain[i]);
    }
    Il me retourne 3 null ! Tandis que si je réalise cette commande, il me retourne les bonnes informations car il arrive à faire la correspondance avec FXML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(P1);
    Comment puis-je faire cette correspondance dans un tableau ?

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    On a pas le FXML et on a pas le code qui fait le chargement du FXML et le code qui instancie et manipule le contrôleur. Désolé mais ma boule de cristal est en panne; les piles probablement...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Pardon ....

    Contrôleur du fichier FXML :
    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
     
    public final class ScrabbleController extends RMI_Client implements Initializable {
    @FXML
    Cellule P1;
    @FXML
    Cellule P2;
    @FXML
    Cellule P3;
     
    @FXML
    Cellule tableCelluleMain[] = {P1, P2, P3, P4, P5, P6, P7};
     
    public void voir(ActionEvent event) throws IOException, RemoteException, NotBoundException {
       // Par exemple, je souhaite récupérer des informations concernant une cellule dans mon FXML
       for (int i = 0; i < tableCelluleMain.length; i++) {
             System.out.println(tableCelluleMain[i]);
       }
    }
    Fichier FXML Scrabble.fxml :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import java.lang.*?>
    <?import java.net.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.effect.*?>
    <?import javafx.scene.image.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.paint.*?>
    <?import javafx.scene.shape.*?>
    <?import javafx.scene.text.*?>
    <?import _GraphiqueScrabble.*?>
     
    <AnchorPane id="AnchorPane" prefHeight="680.0" prefWidth="780.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="_GraphiqueScrabble.ScrabbleController">
         <children>
         <Group>
           <children>
                <Cellule id="P1" fx:id="P1" layoutX="148.0" layoutY="610.0" onMousePressed="#caseMainPressed" prefHeight="30.0" prefWidth="30.0" style="-fx-background-color: grey;" stylesheets="@../CSS/cellule_default.css" />
                <Cellule id="P2" fx:id="P2" layoutX="178.0" layoutY="610.0" onMousePressed="#caseMainPressed" prefHeight="30.0" prefWidth="30.0" style="-fx-background-color: grey;" stylesheets="@../CSS/cellule_default.css" />
                <Cellule id="P3" fx:id="P3" layoutX="118.0" layoutY="610.0" onMousePressed="#caseMainPressed" prefHeight="30.0" prefWidth="30.0" style="-fx-background-color: grey;" stylesheets="@../CSS/cellule_default.css" />
             </children>
          </Group>
         </children>
    </AnchorPane>
    Main :
    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
     
    public class Client extends Application {
     
         @Override
         public void start(Stage stage) throws Exception {
              Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("_GraphiqueScrabble/Scrabble.fxml"));
              Scene scene = new Scene(root);
              stage.setScene(scene);
              stage.show();
         }
     
         public static void main(String[] args) throws RemoteException, NotBoundException {
              launch(Client.class, args);
         }
     
    }

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @FXML
    Cellule P1;
    @FXML
    Cellule P2;
    @FXML
    Cellule P3;
     
    @FXML
    Cellule tableCelluleMain[] = {P1, P2, P3, P4, P5, P6, P7};
    Par :

    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
    //Private c'est mieux !
    @FXML
    private Cellule P1;
    @FXML
    private Cellule P2;
    @FXML
    private Cellule P3;
     
    // Ceci n'est pas déclaré dans le FXML donc on ne met pas d'annotation. 
    private Cellule tableCelluleMain[];
     
    @Override
    public void initialize(final URL url, final ResourceBundle bundle) {
         tableCelluleMain = new tableCelluleMain[]{P1, P2, P3, P4, P5, P6, P7};
    }
    Lorsque la classe du contrôleur est initialisée, son constructeur est invoqué par le chargeur. A ce moment, P1, P2, etc. sont initialement à null. Donc il est normal que le tableau contienne des valeurs null.
    Après l'initialisation (donc après la sortie du constructeur), le loader va injecter les variables dans le contrôleur.
    La méthode initialize() est invoquée par le loader une fois l'injection finie, donc toutes les variables en provenance du FXML ont alors été initialisées à leur valeur finale.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour la solution, mais je pense que vous vouliez dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void initialize(URL url, ResourceBundle rb) {
              // Initialisation du tableau de cellule fesant référence au fichier FXML
              tableCelluleMain = new Cellule[]{P1, P2, P3, P4, P5, P6, P7};
    }
    En effet, je ne fessais pas cette initialisation dans le contrôleur, et je me retrouver avec des valeurs nulles.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Vi vi, j'ai tapé un peu vite
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/08/2013, 19h06
  2. Comment faire que des objets 3D ne se touchent pas dans une scène.
    Par ibrakola dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 16/05/2012, 01h40
  3. Réponses: 1
    Dernier message: 09/09/2010, 10h37
  4. Identifier un objet donné dans un tableau d'objets
    Par tiboleo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/12/2009, 21h23
  5. Réponses: 4
    Dernier message: 03/04/2005, 14h26

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