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 :

Indexe sur un GridPane


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de fang44z
    Homme Profil pro
    Gardien de la matrice
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Gardien de la matrice

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut Indexe sur un GridPane
    Bonjour/Bonsoir,

    Je suis débutant en Java et JavaFX d'autant plus, j'ai voulu m’entraîner un petit peux en essayant de crée un jeu de "morpion". Le probléme c'est que je suis un peux bloquer sur comment finir la partie...

    Voici mon code pour le moment:

    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
     
    @Override
        public void start(Stage stage) throws Exception {
            //Creation des composants
            Label playerName = new Label("Turn: X");
            BorderPane mainPane = new BorderPane();
            GridPane grille = new GridPane();
            //ajout des boutons sur le GridPane + création des boutons
            for (int i = 1; i<=3; i++){
                for (int j = 1 ; j<=3; j++){
                    Button xoButton = new Button(" ");
                    xoButton.setFont(Font.font("Monospaced", 40));
                    grille.add(xoButton, i,j);
                    //Comportement des boutons
                    xoButton.setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent actionEvent) {
                            String[] splitter = playerName.getText().split(" ");
                            String player = splitter[1];
                            if(!xoButton.getText().equals(" ")){
                                return;
                            }if(player.equals("X")){
                                xoButton.setText("X");
                                playerName.setText("Turn: O");
                            }if(player.equals("O")){
                                xoButton.setText("O");
                                playerName.setText("Turn: X");
                            }
                        }
                    });
                }
            }
     
            mainPane.setTop(playerName);
            mainPane.setCenter(grille);
     
            Scene scene = new Scene(mainPane);
            stage.setScene(scene);
            stage.show();
     
     
        }
    Pour le moment ca fonctionne quand je clique ca change les boutons selon le tour X ou O. Ce que je voudrais maintenant c'est terminer la parti c'est à dire si la partie est nul ou gagné.
    Cependant je n'arrive pas à avoir accés aux .getText() de chacun des boutons sur la GridPane.
    exemple: Si les bouton.getText() sur la grille position 0,1, et 0,2 et 0,3 sont égaux c'est gagné pour le joueur(X ou O)...

    J'ai cherché sur google je n'ai absolument rien compris et encore moins comment je pourrais l'intégrer sur mon code. Alors soit il y a une solution simple, soit je m'y prend comme un manche et il aurait fallu que je m'y prenne autrement plutôt que sur un GridPane...
    Je fais donc appel à vous(sans me donner la solution pas A+B) un petit/gros indice ou des conseils sur comment je pourrais faire pour que mon programme puisse fonctionner.

    Merci à vous pour vos futurs réponses

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Dans ton GridPane tes boutons sont stockés dans une liste donc pas dans une grille. Si tu veux savoir quel bouton est sur quelle grille/colonne tu dois soit retirer l'info existante soit rajouter une info supplémentaire pour la stocker.

    Déjà ça... c'est pas le GridPane de JavaFX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grille.add(xoButton, i,j);
    Comme l'indique la doc, pour ajouter du contenu dans GridPane il faut procéder d'une des deux manières suivantes :

    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
         GridPane gridpane = new GridPane();
     
         // 1.
         // Set one constraint at a time...
         // Places the button at the first row and second column
         Button button = new Button();
         GridPane.setRowIndex(button, 0);
         GridPane.setColumnIndex(button, 1);
     
         // 2.
         // or convenience methods set more than one constraint at once...
         Label label = new Label();
         GridPane.setConstraints(label, 2, 0); // column=2 row=0
     
         // don't forget to add children to gridpane
         gridpane.getChildren().addAll(button, label);
    Ce qu'on peut voir :
    • La méthode statique GridPane.setRowIndex() permet de spécifier la ligne.
    • La méthode statique GridPane.setColumnIndex() permet de spécifier la colonne.
    • La méthode statique GridPane.setConstraints() permet de spécifier les deux.


    En fait chacune de ces méthode stocke une valeur dans la Map retournée par la méthode getProperties() qui existe dans chaque nœud. Par exemple setColumnIndex() stocke la valeur "gridpane-column" dans cette Mp tandis que setRowIndex() stocke la valeur "gridpane-row". GridPane.setConstraints() utilise bien sur les 2 valeurs. Ces valeurs (et d'autres) sont utilisées pour la mise en page des composants inclus dans un GridPane.
    Il t'es donc possible aussi de retirer ces valeurs et de chercher celles qui t'intéressent.

    Mais rien ne t'empêche non plus de stocker l'info à ta sauce soit dans l'id du bouton, soit en stockant tes propres valeurs avec tes propres clés (de manière à ne pas intéférer avec celles de GridPane qui sont après tout définies dans l'API et peuvent changer du jour au lendemain) dans les propriété de chaque bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Button xoButton = new Button(" ");
     
    xoButton.setId("%d-%d".formatted(row, column));
     
    xoButton.getProperties().put("my-row", row);
    xoButton.getProperties().put("my-column", column);
    PS : dans ton code tu ne mets pas de RowConstraints et de ColumnsConstraints dans ta grille ce qui peut être gênant.
    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

Discussions similaires

  1. Index sur datetime ne fonctionnant pas
    Par Pierrinot dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/10/2004, 09h10
  2. Comment savoir s'il existe un index sur ma table ?
    Par CDRIK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/10/2004, 09h58
  3. [Debutant][Tableau] Tableau indexé sur chaine de caractères
    Par SamRay1024 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 11h14
  4. n INDEXs sur chaque champ ou 1 seul INDEX sur n ch
    Par fourchette dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/04/2004, 10h55
  5. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 10h20

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