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

Langage Java Discussion :

attendre clic bouton pour passer à l'action suivante


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2014
    Messages : 22
    Points : 17
    Points
    17
    Par défaut attendre clic bouton pour passer à l'action suivante
    bonjour,

    je souhaiterai exécuter différentes fonctions les unes à la suite des autres, le passage de l'une à l'autre s'effectuant en appuyant sur des boutons (le tout dans mon programme principal)
    En gros mettre en attente l’exécution tant qu'il n'y a pas eu clic sur le bouton.
    Thread et boucle avec condition ne fonctionne pas (thread est indépendant du prg principal et la boucle d'attente avec condition bloque tout (ce qui semble normal)).
    Cette possibilité me permettrait de centraliser la logique d'execution dans une même fonction plutôt que de les repartir entre les différents boutons de déclenchement (plus facile à debugger).

    par avance merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public void SuiteAction()
       {
     
           Action(1);//attente du premier clic pour executer Action(2)
     
           Action(2);///attente du deuxieme clic pour executer Action(3)
     
           Action(3);///attente du troisiee clic pour executer Action(4)
     
           Action(4);
       }

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Tu devrais modifier la logique.
    Ne pas "attendre" le clique de l'utilisateur, mais se déclenché lors du clique de l'utilisateur.

    Supposons que tu ai une liste d'action et l'index de l'action courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private List<Action> actions = new ArrayList<Action>();
    private int indexCurrentAction = 0;
    private void init() {
        actions.add(action1);
        actions.add(action2);
        actions.add(action3);
        actions.add(action4);
    }
    Lors du clique de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(indexCurrentAction <actions.size()){
        // On lance l'action
        actions.get(indexCurrentAction).do();
        //On mets à jour l'index pour la fois suivante:
        indexCurrentAction++;
    }
    Après il est aussi possible de faire une machine à état où chaque clique utilisateur déclenche une mise à jour de celle-ci.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    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,

    Pas besoin de Thread particulier pour faire ça. On peut faire un dialogue modal (JDialog) avec un bouton "Suivant". A chaque clic, le bouton prend l'Action dans une List<Action> à un index donné, l'exécute, et incrémente l'index, tout simplement. Après l'exécution de la dernière action, on ferme le dialogue. On peut même afficher une progression dans le dialogue, un texte qui indique ce que va faire le clic sur le bouton et/ou le résultat de l'action qu'on vient d'éxécuter. Si le bouton doit être dans une fenêtre qui gère d'autres actions, on peut faire de même, mais il faudra désactiver toutes les autres fonctions de la fenêtre (setEnabled(false)), pour empêcher de pouvoir rompre l'enchainement d'action.

    Il faut penser qu'on peut écrire :

    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
    public class MultipleActionExecutor implements ActionListener {
     
    	private int index=0;
    	private List<Action> actions;
     
    	public MultipleActionExecutor(List<Action> actions) {
    		this.actions=actions;
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		if (index==0) {
    			start();
    		}
    		actions.get(index).actionPerformed(event);
    		index++;
    		if ( index>= actions.size() ) {
    			index=0;
    			end();
    		}
    	}
     
    	public void start() {
     
    	}
     
    	public void end() {
     
    	}
     
    }
    Et par exemple,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    button.addActionListener(new MultipleActionListener(actions) {
        public void start() {
            // désactive toutes les autres actions/fields, etc...
        }
       public void end() {
            // réactive toutes les autres actions/fields, etc...
       }
    });
    Si l'objet du Thread évoqué est de faire une tâche de fond, on peut faire un dialogue non modal, avec un bouton, qu'on désactive entre chaque action (setEnabled(false) avant d'exécuter l'action, et setEnable(true). Chaque action lance un thread pour exécuter sa tâche.

    En gros :
    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
    button.addActionListener((e)-> {
          button.setEnabled(false);
          Thread thread=new Thread() {
                 public void run() {
                         //     ... exécuter ici le code adéquate en fonction de l'index (variable membre de la classe par exemple) à exécuter en fonction de l'index (qui ne sont plus des javax.swing.Action, mais peuvent être des classes truc.machin.Action à toi, ou utiliser un switch
                        index++;
                        SwingUtilities.invokeLater(index==fin
                        ?new Runnable() {
     
    			@Override
    			public void run() {
    				button.setenabled(true);
    			}
    		    })
                        :new Runnable() {
     
    			@Override
    			public void run() {
    				dialog.dispose(); // fermer le dialogue
    			}
    		    });
                 }
          }.start();
    });
    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.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2014
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses je vais commencer par un automate la boite de dialogue me servira dans un second temps

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

Discussions similaires

  1. [WD17] Procédure lancée par évenement : pause pour attendre clic bouton
    Par chapeau_melon dans le forum WinDev
    Réponses: 11
    Dernier message: 15/01/2013, 20h31
  2. Bouton pour aller à l'enregistrement suivant
    Par yellowsub122 dans le forum VB.NET
    Réponses: 13
    Dernier message: 16/03/2010, 18h17
  3. [AC-2007] Bouton pour passer à l'onglet suivant
    Par Saori dans le forum IHM
    Réponses: 1
    Dernier message: 15/05/2009, 17h50
  4. Incrémenter un bouton pour aller à la page suivante
    Par wolverine1987 dans le forum MFC
    Réponses: 2
    Dernier message: 07/05/2009, 11h22
  5. Bouton pour passer a la ressource suivante ?
    Par bionicleman dans le forum Delphi
    Réponses: 14
    Dernier message: 25/04/2007, 18h18

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