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 :

Simuler un clic sur un bouton


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut Simuler un clic sur un bouton
    Bonjour,

    S'il est conseillé de mettre une class privée comme contr'oleur, comment puis-je faire pour simuler un événement comme un clique sur avec le bouton de gauche de la souris sur un bouton (peut-être doclick) ou simuler l’appuie d'une touche sur le clavier.

    Pour ma part, j’écrivais une méthode que j'appelais depuis le listener tant dans l'événement que dans les méthode simulant ce dernier.

    Comment ferriez-vous pour simuler un événement.

    Merci de me répondre.

    Salutations
    Battant

  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,

    Au lieu de simuler le clic sur un bouton, il suffit d'appeler la méthode du contrôleur qui est appelée dans l'écouteur d'évenement : le but d'un contrôlleur, c'est, entre autres, de découpler le code de traitement du code de l'UI pure, afin que ce code de traitement puisse être appelé dans d'autres UI, mais aussi sans UI (ou pour simuler une UI).
    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 averti
    Inscrit en
    Février 2006
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 707
    Points : 366
    Points
    366
    Par défaut
    Bonjour,

    A mon sens, appeler la méthode événementielle d'un contrôleur (par exemple actionListener) nécessite de passer en paramètre la classe d'événement.

    Comment faire si on n'a pas l'instance de cet événement ?

    Merci de votre réponse

    Salutations
    Battant

  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
    Il faut distinguer le contrôleur de l'écouteur d'évenements. Exemple :

    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
    public class Vue extends JPanel {
     
        private Controler controler = new Controler();
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Demo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		final Vue vue = new Vue();
    		frame.setContentPane(vue);
     
    		frame.setLocationRelativeTo(null);
    		frame.setSize(200, 200);
    		frame.setVisible(true);
     
            // simule l'action faite par le bouton dans 1s
            new Timer().schedule(new TimerTask() {
     
    			@Override
    			public void run() {
    				vue.incCounter();
    			}
    		}, 1000);
     
    	}
     
        public Vue() {
            setLayout(new BorderLayout());
            JButton button = new JButton("incrémente");
            button.addActionListener( (event) -> controler.incCounter() );
            add(button, BorderLayout.NORTH);
            JLabel label = new JLabel(String.valueOf(controler.getCounterValue()),JLabel.CENTER);
            add(label, BorderLayout.CENTER);
            controler.addListener( (counter) -> label.setText(String.valueOf(counter)));
     
        }
     
        // méthode qui simuler l'action faite par le bouton
        public void incCounter() {
        	SwingUtilities.invokeLater( () -> controler.incCounter() );
        }
     
    	private class Controler {
     
    		private List<ICounterChangeListener> counterChangelisteners = new ArrayList<>();
     
    		private int counter;
     
    		public Controler() {
     
    		}
     
    		public int getCounterValue() {
    			return counter;
    		}
     
    		public void addListener(ICounterChangeListener listener) {
    			if( !counterChangelisteners.contains(listener) ) {
    				counterChangelisteners.add(listener);
    			}
    		}
     
    		public void removeListener(ICounterChangeListener listener) {
    			counterChangelisteners.remove(listener);
    		}
     
    		private void fireCounterChange(int counter) {
    			for(ICounterChangeListener listener : counterChangelisteners ) {
    				listener.change(counter);
    			}
    		}
     
    		public void setCounterValue(int value) {
    			counter=value;
    			fireCounterChange(counter);
    		}
     
    		public void incCounter() {
    			counter++;
    			fireCounterChange(counter);
    		}
     
    	}
     
    	private interface ICounterChangeListener {
     
    		void change(int counterValue);
     
    	}
     
    }
    Il y a effectivement aussi la méthode doClick de button, qui simule l'action utilisateur de cliquer sur le bouton. Mais si on a un controler avec les méthodes de modification du modèle, autant utiliser directement ces méthodes, plutôt que de simuler le clic avec doClick() (à moins que tu veuilles avoir l'effet de bouton qui s'actionne effectivement).
    Maintenant, si le but est de simuler le fonctionnement de l'interface comme si un utilisateur la manipulait (avec souris qui se déplace, etc.), il y a la classe Robot. Avec cette classe, tu peux simuler la souris et le clavier, mais par rapport à la position de la souris.
    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. Simuler un clic sur un bouton
    Par pasqual dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/08/2009, 10h10
  2. [HTML] simuler un clic sur un bouton
    Par sebac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/06/2009, 18h13
  3. comment simuler un clic sur un bouton en java
    Par kohan95 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2009, 13h31
  4. Simuler le clic sur le bouton OK d'une fenêtre
    Par msprittc dans le forum Delphi
    Réponses: 5
    Dernier message: 25/09/2006, 18h43
  5. [VB.NET]Simuler un clic sur un bouton
    Par olbi dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/03/2006, 11h46

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