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

 Java Discussion :

Savoir si un JBouton est cliqué ou pas


Sujet :

Java

  1. #1
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut Savoir si un JBouton est cliqué ou pas
    Bonjour,

    Intro:
    Voila mon problème va vs sembler très simple j'aimerais savoir qd un bouton est cliquable ou non.

    Prb:
    Pour résoudre ce prb j'ai fait le code (ci dessous) cependant dés que je supprime la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("boutton jouer cliquable.");
    .Alors ca ne fonctionne plus.

    Note:
    Le clique sur l'animation lance une animation de ce coté a tt va bien.

    Merci pour vos réponses.

    PS:c'est assez urgent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    boolean jouer=false;
    while(jouer==false){
    			if (bJouer.getModel().isEnabled()){
    				System.out.println("boutton jouer cliquable.");
    			}else{
    				System.out.println("boutton jouer NON cliquable.");
    				jouer=true;
    				jfram.dispose();
    			}
    		}
    EDIT:Qq précisions

    I/
    1-Une premiere fenetre s'ouvre avec 2 boutons:"lancer l'animation" et "quitter"
    2-Si je clique sur "quitter"->la fenetre se ferme
    3-Si je clique sur " lancer l'animation"->La premiere fenetre se ferme puis en ouvre une seconde (fenetre) ou il y'a une animation.

    ---Précision :
    j'ai un projet à rendre en java pour le 01/06 ou je devais faire juste l'animation(qui fonctionne).J'ai souhaité en faire un peu plus en créant une "fenetre d'acceuil" avec deux boutons,un pour lancer l'animaion(dans une nouvelle fenetre)l'autre pour quitter l'aplication...voila

    II/
    Ce qui se passe qd je supprime cette ligne :rien le bouton est cliqué mais :"La premiere fenetre ne se ferme PAS puis n'ouvre donc pas une seconde (fenetre) ou il y'a une animation."

    En gros ceci se résume en une problématique:
    Comment savoir quel bouton est cliqué ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand tu dis que tu supprimes quelque chose, mets nous exactement ce que tu obtiens. Et précise-nous en quoi ça ne fonctionne plus (message d'erreur affiché à l'exécutiion, compilation impossible, etc...).

    Par exemple, quand tu supprimes la ligne en question, tu obtiens ce qui suit ou autre chose ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    boolean jouer=false;
    while(jouer==false){
    			if (bJouer.getModel().isEnabled()){
     
    			}else{
    				System.out.println("boutton jouer NON cliquable.");
    				jouer=true;
    				jfram.dispose();
    			}

    Code qui pourrait être simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while(bJouer.isEnabled()) { 
         System.out.println("boutton jouer cliquable.");
    }
    System.out.println("boutton jouer NON cliquable.");
    jouer=true;
    jfram.dispose();
    Mais attention, un tel code peut faire que le thread tourne tellement vite qu'il prend tout le cpu et n'en laisse plus aux autres : du coup, le bouton ne passe jamais à enabled=false et la boucle est infinie (bizarre, il m'aurait sembler plus logique d'attendre que le bouton passe de not enabled à enabled, mais bon, admettons).

    Si le but et que ton timer d'animation passe le bouton à not enabled à la fin de l'animation, et que tu le scrute pour savoir quand il passe à enabled pour savoir que l'animation est terminée, le mieux est de passer par un système de signal. Soit tu te fais une méthode qui permet à ton timer d'avertir qui il faut que l'animation est terminée, afin de faire ce que tu as à faire, soit tu utilises les mécanismes de base de Java, à savoir la méthode wait et la méthode notify :

    au lieu de la boucle d'attente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    System.out.println("boutton jouer cliquable.");
    synchronized( bJouer) {
       if( bJouer.isEnabled() ) {
          try {
             bJouer.wait();
          }
          catch(InterruptedException e) {
             // traitement éventuellement à adapter ici
         }
      }
    }
    Et quand ton timer d'animation fait setEnabled(true),

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    synchronized( bJouer ) {
         bJouer.setEnabled(true);
         bJouer.notify();
    }
    Ainsi, le thread d'attente ne consommera aucun cpu à attendre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Joel//

    Merci de ta réponse je vais clarifier un peu.

    I/
    1-Une premiere fenetre s'ouvre avec 2 boutons:"lancer l'animation" et "quitter"
    2-Si je clique sur "quitter"->la fenetre se ferme
    3-Si je clique sur " lancer l'animation"->La premiere fenetre se ferme puis en ouvre une seconde (fenetre) ou il y'a une animation.

    ---Précision :
    j'ai un projet à rendre en java pour le 01/06 ou je devais faire juste l'animation(qui fonctionne).J'ai souhaité en faire un peu plus en créant une "fenetre d'acceuil" avec deux boutons,un pour lancer l'animaion(dans une nouvelle fenetre)l'autre pour quitter l'aplication...voila

    II/
    Ce qui se passe qd je supprime cette ligne :rien le bouton est cliqué mais :"La premiere fenetre ne se ferme PAS puis n'ouvre donc pas une seconde (fenetre) ou il y'a une animation."

    En gros ceci se résume en une problématique:
    Comment savoir quel bouton est cliqué ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je vois mieux ce que tu cherches à faire, mais sans code je ne peux pas voir comment tu le fais. Ensuite, je vois le rapport en ce que tu décris et cette boucle d'attente du coup : je ne vois pas à quoi elle sert. D'autant plus qu'il n'y aucun rapport entre l'état enabled d'un bouton et le fait qu'on clique le bouton, si ce n'est qu'on ne peut pas cliquer un bouton s'il n'est pas enabled, mais comme tu me dis que la fenêtre qui contient le bouton qui lance l'animation est fermée lorsqu'on lance l'animation, le bouton n'est même plus censé exister, ou, en tout cas, n'est plus visible, donc non cliquable, enabled ou pas.

    A la question "comment savoir quel bouton est cliqué", j'aurais tendance à dire que le plus simple est de ne pas avoir à le savoir. SWING étant évenementiel, au lieu de chercher à savoir ce qui est cliqué ou pas, autant écouter les évènements sur leur producteur et les traiter circonstanciellement.


    Par exemple, si j'ai deux boutons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bouton1.addActionListener(e-> System.out.println("Je sais qu'on a cliqué sur le bouton 1") ); 
     
    bouton2.addActionListener(e-> System.out.println("Je sais qu'on a cliqué sur le bouton 2") );
    ou dans ton contexte :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    boutonLancer.addActionListener(e-> lancerAnimation() ); 
     
    boutonQuitter.addActionListener(e-> fermerFenetre() );
    Il n'y a aucun test à faire ici. Chaque écouter est associé à son bouton, et le traitement qu'on y fait est celui qui correspond.


    PS: sans le code complet, avant et après, j'ai du mal à imaginer comment un System.out.println() présent ou absent a un impact sur sur la fermeture ou non d'une fenêtre...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    1-En cliquant sur "lancer l'animation" on char la classe qui s'en charge.

    2-Voici la partie du code concernant les boutons:

    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
    JButton bJouer=new JButton("Jouer l'animation!"),bQuitter=new JButton("Quitter!");
    		jpan.add(bJouer,BorderLayout.SOUTH);jpan.add(bQuitter,BorderLayout.SOUTH);
     
    		boolean jouer=false;
    		bJouer.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.println("cliquez:jouer!");
    				bJouer.setEnabled(false);
    			}
    		});
    		bQuitter.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.println("cliquez:quittez!");
    				jfram.dispose();
    			}
    		});
     
    		jfram.setVisible(true);
     
    		while(jouer==false){
    			if (bJouer.getModel().isEnabled()){
    				System.out.println("boutton jouer cliquable.");
    			}else{
    				System.out.println("boutton jouer NON cliquable.");
    				jouer=true;
    				jfram.dispose();
    			}
    		}
     
    		return jouer;
    PS:Nous n'avons normalement "pas vu" les boutons en JAVA comme je l'ai dit c'est "un plus"

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pif_Paf_Pouf Voir le message
    1-En cliquant sur "lancer l'animation" on char la classe qui s'en charge.
    Tout ce que je vois dans l'écouteur du bouton bJouer, c'est que, à part une trace dans la console, le bouton bJouer est désactivé. C'est tout.
    Par contre, la boucle while ne sert qu'à consommer du cpu.

    Tu peux faire tout simplement :

    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
    JButton bJouer=new JButton("Jouer l'animation!"),bQuitter=new JButton("Quitter!");
    		jpan.add(bJouer,BorderLayout.SOUTH);jpan.add(bQuitter,BorderLayout.SOUTH);
     
    		boolean jouer=false;
    		bJouer.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.println("cliquez:jouer!");
    				jfram.dispose();
     
                                    // ici il manque quelque chose pour lancer l'animation
     
    			}
    		});
    		bQuitter.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.println("cliquez:quittez!");
    				jfram.dispose();
    			}
    		});
     
    		jfram.setVisible(true);

    J'imagine que le boolean jouer qui est retourné à l'appelant est testé pour lancer l'animation, un truc dans le genre. Ce n'est pas du tout comme ça qu'on gère les boutons (je veux dire avec une boucle infinie qui attend un changement d'état en faisant une boucle active.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    Merci joel le prb c'est que je veux instancier une classe (a la ligne 9 de ton code) j'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	bJouer.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				System.out.println("cliquez:jouer!");
    				bJouer.setEnabled(false);
    				try {
    					Classe1 cl1=new Classe1();
    				} catch (IOException | InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		}
    Mais ma classe1 se crée mal :'( Alors que si je l'instancie tte seule alors elle marche parfaitement...(le prb ne vient pas de la classe1)

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pif_Paf_Pouf Voir le message
    Mais ma classe1 se crée mal :'( Alors que si je l'instancie tte seule alors elle marche parfaitement...(le prb ne vient pas de la classe1)
    Qu'est-ce que ça veut "se crée mal" ? Il y a une exception ? Laquelle ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [MySQL] Savoir si un champ est NULL ou pas
    Par Keulig dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/02/2006, 18h32
  2. comment savoir si un contrôle est mulitiline ou pas ?
    Par Ekimasu dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 10h28
  3. comment savoir si une fenetre est agrandi ou pas ?
    Par EssaiEncore dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2005, 11h42
  4. savoir si une table est masquée ou pas
    Par scully2501 dans le forum Access
    Réponses: 13
    Dernier message: 22/09/2005, 12h19
  5. [Souris] Savoir si un bouton est cliqué
    Par Fabs dans le forum Composants VCL
    Réponses: 2
    Dernier message: 15/07/2004, 15h23

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