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 :

problème onAction bouton


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut problème onAction bouton
    Bonjour
    J'ai un petit soucis avec onAction des boutons, je vous explique
    J'ai la vue suivante

    Sample.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
     
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import java.net.*?>
    <?import javafx.geometry.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.text.*?>
     
    <AnchorPane fx:id="AnchorPane" prefHeight="650" prefWidth="650" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication1.SampleController">
        <stylesheets>
       <URL value="@toto.css" />
     </stylesheets>
     
        <children>
           <FlowPane fx:id="flowpan" prefHeight="200.0" prefWidth="300">
     
     
           </FlowPane>  
        </children>
    </AnchorPane>
    dans cette vue il faut que je crée des Pane selon le nombre de Matériel que j'ai, c'est à dire si j'ai 3 matériels je doit ajouter à ma vue (entre FlowPane) 3 pane, chaque pane contient un label et un bouton
    voilà mon controlleur

    SampleController.java

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ResourceBundle;
    import javafx.beans.property.ListProperty;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.fxml.FXML;
    import javafx.fxml.Initializable;
    import javafx.geometry.Insets;
    import javafx.geometry.Pos;
    import javafx.scene.control.Button;
    import javafx.scene.control.ButtonBuilder;
    import javafx.scene.control.ComboBox;
    import javafx.scene.control.Label;
    import javafx.scene.control.LabelBuilder;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.layout.AnchorPaneBuilder;
    import javafx.scene.layout.FlowPane;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.HBoxBuilder;
    import javafx.scene.layout.Pane;
    import javafx.scene.layout.PaneBuilder;
    import javafx.scene.text.Font;
     
    /**
     *
     * @author admin
     */
    public class SampleController implements Initializable {
     
     
        @FXML
        private HBox hboxButton;
     
        @FXML
        private FlowPane flowpan;
     
        @FXML
        private Button changeButton;
     
        @FXML
        private Label materielLabel;
     
     
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            // TODO
     
            ArrayList<Materiel> l1=new ArrayList<>();
            Materiel m1=new Materiel("Materiel 1");
            Materiel m2=new Materiel("Materiel 2");
             Materiel m3=new Materiel("Materiel 3");
     
     
              l1.add(m1);
              l1.add(m2);
               l1.add(m3);
                //construire les different Pane
            createMaterielPan(l1);
        }  
     
        public void createMaterielPan(ArrayList<Materiel> l1)
    	{       
                    //creation des pane selon le nombre de materiels
    		for(int j=0; j<l1.size(); j++)
    		{
                        //creer label
    			materielLabel=LabelBuilder.create().text(l1.get(j).getNomMateriel())
    			.layoutX(42.0)
    			.layoutY(23.0)
    			.prefWidth(147.0)
    			.font(new Font("System Bold", 18.0))
     
    			.build();
     
    			//creation du bouton "changer"
     
    			changeButton= ButtonBuilder.create()
    				.styleClass("MenuButton")
    				.text("Changer")
    				.onAction(new EventHandler<ActionEvent>() { //Action on button
    				@Override
    				public void handle(ActionEvent t) 
    				{
                                            hboxButton.getChildren().remove(changeButton);//supprimer bouton au clique
     
                                    }
    				})
    				.build();
    			//hbox du bouton "changer"						
    			hboxButton=HBoxBuilder.create()
    				.padding(new Insets(10.0, 10.0, 10.0, 10.0))
    				.alignment(Pos.BOTTOM_RIGHT)
    				.layoutY(118.0)
    				.spacing(8.0)
    				.prefWidth(228.0)
    				.children(changeButton)//add button to the hboxButton
    				.prefHeight(58.0).build();
     
    			//creation du pan
    			  Pane p=PaneBuilder.create().children
    			(
    				AnchorPaneBuilder.create()
    				.prefHeight(200.0)
    				.prefWidth(228.0)
    				.layoutX(89.0)
    				.styleClass("MainPane")
    				.children(materielLabel,hboxButton)//add label and hboxbutton
    				.build()
     
    			).build();
    			flowpan.getChildren().add(p);//add pan to the flopan (fxml)
     
    		}}}

    donc mon problème est dans .onAction sur le bouton (fonction createMaterielPan du controlleur)quand je clique sur le bouton de mon premier pane
    c'est le bouton du 3ième pane qui est supprimé
    je voudrais savoir comment faire la différence entre quel bouton de quel pan à été cliqué

    voilà..j'espère que c'est un peux claire

    Merci

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Je suis désolé mais n'étant pas encore expert en jfx je ne vois pas comment résoudre "directement" ton problème. Mais pourquoi établi tu la construction de tes objets graphique dans le controller ?

    En séparant le graphique dans ton fxml tu pourrais peut-être mieux cerner d’où ca viens.

    Je trouve bizarre que tu n'ai qu'un seul button declaré dans ton controller et finalement en produire 2 autres qui ont comme déclaration une partie d'eux-même.

    Peut-être ré-instancie tu 3 fois le même button qui réagirons de la même manière et donc ton button1 va réagir pour supprimer le bouton 1 mais après le button2 et il finira par ce caller et rester sur le 3e button puisqu'il n'y a pas de nouvelle instanciation de bouton.

    ou un phénomène contraire...

    Bref je dit surement n'importe quoi mais au moins j'aurais essayé. bon courage.

  3. #3
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    essaies:
    a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      hboxButton.getChildren().remove(changeButton);//supprimer bouton au clique
    mets plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      hboxButton.getChildren().remove(this);//supprimer bouton au clique

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par miltone Voir le message
    Je suis désolé mais n'étant pas encore expert en jfx je ne vois pas comment résoudre "directement" ton problème. Mais pourquoi établi tu la construction de tes objets graphique dans le controller ?

    En séparant le graphique dans ton fxml tu pourrais peut-être mieux cerner d’où ca viens.

    Je trouve bizarre que tu n'ai qu'un seul button declaré dans ton controller et finalement en produire 2 autres qui ont comme déclaration une partie d'eux-même.

    Peut-être ré-instancie tu 3 fois le même button qui réagirons de la même manière et donc ton button1 va réagir pour supprimer le bouton 1 mais après le button2 et il finira par ce caller et rester sur le 3e button puisqu'il n'y a pas de nouvelle instanciation de bouton.

    ou un phénomène contraire...

    Bref je dit surement n'importe quoi mais au moins j'aurais essayé. bon courage.

    Au fait je ne veux pas créer mes "composants" directement dans le graphique parce que tout dépend de combien de matériels j'en ai, je reçois mes matériels du model (aujourd’hui ça peut être trois matériels , demain 20) donc selon le nombre de mes matériels je crée les "Pane" .

    Merci pour ta réponse

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    essaies:
    a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      hboxButton.getChildren().remove(changeButton);//supprimer bouton au clique
    mets plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      hboxButton.getChildren().remove(this);//supprimer bouton au clique

    J'ai essayé, ça marche pas non plus.

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    En même temps tu n'as qu'un seul changeButton dans ce contrôleur et en plus ce n'est pas celui du FXML qui est utilisé mais le dernier construit par le 3eme appel a createMaterielPan() vu que tu écrases tout à chaque appel à cette fonction...

    Donc, bref, je ne vois pas trop ce que tu essaies de faire...

    EDIT - ah oui et rien n'empêche justement d'avoir un template pour le plan de chaque Matériel défini dans un FXML à part (avec ou pas son propre contrôleur).
    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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par bouye Voir le message
    En même temps tu n'as qu'un seul changeButton dans ce contrôleur et en plus ce n'est pas celui du FXML qui est utilisé mais le dernier construit par le 3eme appel a createMaterielPan() vu que tu écrases tout à chaque appel à cette fonction...

    Donc, bref, je ne vois pas trop ce que tu essaies de faire...

    EDIT - ah oui et rien n'empêche justement d'avoir un template pour le plan de chaque Matériel défini dans un FXML à part (avec ou pas son propre contrôleur).
    C'est bon ça marche, merci.

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    qu'a tu donc fait pour résoudre ton soucis ca m’intéresse.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par miltone Voir le message
    qu'a tu donc fait pour résoudre ton soucis ca m’intéresse.
    Bon, pour le bouton "changer" je l'ai crée de manière "classique"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final Button changer=new Button("Changer");
    et pour les autres containers, à chaque boucle j'en crée un nouveau
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    hboxButton=HBoxBuilder.create()
    				.padding(new Insets(10.0, 10.0, 10.0, 10.0))
    				.alignment(Pos.BOTTOM_RIGHT)
    				.layoutY(118.0)
    				.spacing(8.0)
    				.prefWidth(228.0)
    				.children(changeButton)
    				.prefHeight(58.0).build();

    tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    final HBox boxbutton=HBoxBuilder.create()
    				.padding(new Insets(10.0, 10.0, 10.0, 10.0))
    				.alignment(Pos.BOTTOM_RIGHT)
    				.layoutY(118.0)
    				.spacing(8.0)
    				.prefWidth(228.0)
    				.children(changeButton)
                                    .prefHeight(58.0).build();

    Ainsi pour tout le reste

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

Discussions similaires

  1. [Debutant] Problème de boutons
    Par Welldone dans le forum Débuter
    Réponses: 5
    Dernier message: 08/07/2005, 15h37
  2. [C#] problème de bouton transparent
    Par mbibim63 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/05/2005, 14h50
  3. Réponses: 24
    Dernier message: 11/01/2005, 10h12
  4. [FLASH MX]Problème de bouton et de _level
    Par Geilgestorm dans le forum Flash
    Réponses: 9
    Dernier message: 01/07/2004, 16h37
  5. Problème de boutons radio
    Par BRAUKRIS dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2004, 02h41

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