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

AWT/Swing Java Discussion :

[debutant] effet mémoire des boutons swing.


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut [debutant] effet mémoire des boutons swing.
    Bonjour,

    Arrêtez moi si je me trompe
    J'ai l'impression que dans Swing (et peut etre ailleurs), les boutons ont un effet mémoire.

    Exemple,
    Mon appli à un bouton qui lance une action qui dure 2 secondes.
    Je click 12 fois sur ce bouton, et me voila parti pour 24 secondes d'attente...

    Je souhaiterai que tant qu'une action n'est pas terminée, les clicks successif soient "oubliés".
    J'ai essayé en mettant un boulean dans l'action, mais ca ne semble pas fonctionner.


    Avez vous déja été confronté à ca, ou avez vous des pistes pour résoudre mon probleme ?
    Merci d'avance
    Richard

  2. #2
    Membre éprouvé Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Par défaut
    Un truc du genre tonBouton.setEnable(false) en debut de ta methode et tonBouton.setEnable(true) en final de ta methode.

    J'ai jamais essayé mais ca doit pas être super dur a faire

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut,

    Comme l'a dit minus, un setEnable() suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void actionPerformed(ActionEvent e)
    {
      monBouton.setEnable(false);
      /* tes opérations */
      monBouton.setEnable(true);
    }
    +

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    ben euh non, ca ne fonctionne pas. Les clicks souris sont toujours mis dans une espèce de file d'attente, et sont exécutés un par un...
    Peut etre que c'est tout simplement la methode qui ne va pas
    Je vous joins un bout de code tout con.

    Le code du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        JButton btn_next = new JButton (">");
        GestionProchaineImage gestionProchaineImage = new GestionProchaineImage ();
        btn_next.addActionListener(gestionProchaineImage);

    et le code de l'actionListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class GestionProchaineImage implements ActionListener {
     public void actionPerformed(ActionEvent contexte) {
       Fenetre_principale.panneau_navigation.btn_next.setEnabled(false);
       ProjetBD.chargement_image_suivante_dans_app();
       Fenetre_principale.panneau_navigation.btn_next.setEnabled(true);
     }
    }
    Merci pour ces premières réponses en tout cas.

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    la fonction : ProjetBD.chargement_image_suivante_dans_app(); n'utilise-t-elle pas un thread ? Dans ce cas, il faut attendre la fin du thread pour réactiver le bouton (méthode join()).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par mavina
    Salut,

    Comme l'a dit minus, un setEnable() suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void actionPerformed(ActionEvent e)
    {
      monBouton.setEnable(false);
      /* tes opérations */
      monBouton.setEnable(true);
    }
    +
    Ou plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void actionPerformed(ActionEvent e) {
        new Runnable() {
            public void run() {
                /// tes actions qui durent longtemps
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        /// les mises à jour graphiques
                    }
                });
            }
        }.start();
    }
    avec à la limite la désactivation du bouton si tu veux pas que ça se fasse plusieurs fois si tu cliques plusieurs fois... Mais de toute façon tu as toujours la main de cette manière

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 82
    Par défaut
    En fait mon probleme n'est pas la durée du traitement, mais le fait que 12 clicks successif = 12 actions.
    Désactiver le bouton lors du premier traitement ne semble pas avoir d'effet.

    Ha oui, le Runnable démarre avec Run() et pas start(), je le dis pour d'autres qui se creuserait la tete en copiant le bout de code

    plize hellpp

  8. #8
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Citation Envoyé par Bighobbit
    En fait mon probleme n'est pas la durée du traitement, mais le fait que 12 clicks successif = 12 actions.
    Désactiver le bouton lors du premier traitement ne semble pas avoir d'effet.

    Ha oui, le Runnable démarre avec Run() et pas start(), je le dis pour d'autres qui se creuserait la tete en copiant le bout de code

    plize hellpp
    *


    Non, un Runnable ne se lance pas avec run...

    C'est juste que Rom s'est un petit peu trompé...

    Soit tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      new Thread() {
            public void run() {
                /// tes actions qui durent longtemps
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        /// les mises à jour graphiques
                    }
                });
            }
        }.start();
    soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      new Thread(new Runnable() {
            public void run() {
                /// tes actions qui durent longtemps
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        /// les mises à jour graphiques
                    }
                });
            }
        }).start();
    Toutefois je suis bien perplexe devant ce code et j'imagine que ceci devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        /// les mises à jour graphiques
                    }
                });
    Bon courage

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par Bighobbit
    En fait mon probleme n'est pas la durée du traitement, mais le fait que 12 clicks successif = 12 actions.
    Désactiver le bouton lors du premier traitement ne semble pas avoir d'effet.
    Justement, si la méthode que tu appelles se contente de lancer un thread, le bouton sera désactivé puis réactivé aussitôt.
    Sinon simplement encadrer le contenu de actionPerformed() par des setEnabled comme tu le fais devrait marcher.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/12/2011, 16h41
  2. [Javascript Debutant]Comment positionner des boutons sur une Image?
    Par bylka dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2007, 14h07
  3. [Swing]Placer des boutons ou et a la taille qu'on veux
    Par danje dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 27/04/2006, 17h43
  4. [Debutant] Pb avec récupération valeurs des boutons radio
    Par Jibees dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/03/2006, 15h25
  5. [swing][JButton] Des boutons qui disparaissent!
    Par soulhouf dans le forum Débuter
    Réponses: 12
    Dernier message: 19/08/2005, 13h51

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