Partage
  • Partager sur Facebook
  • Partager sur Twitter

initMouseEvent

Sujet résolu
    30 juin 2011 à 0:51:50

    Bonjour,

    je voulais savoir comment implémenter la fonction
    initMouseEvent qui permet de générer des évènement souris à partir d'une autre entrée que la souris


    J'ai cette fonction en Javascript

    function simulateClick(element) {
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    cb.dispatchEvent(element);
    }

    mais je ne sais pas comment faire en Java, pour l’implémenter dans une Java application

    Merci d'avance

    Stéphane
    • Partager sur Facebook
    • Partager sur Twitter
      1 juillet 2011 à 2:37:28

      Bonsoir

      je voudrais me servir de la méthode initMouseEvent de http://download.oracle.com/javase/1,5. [...] useEvent.html

      dans une appli, mais je ne sais pas trop comment faire

      Tous les exemples que je trouve sont pour insérer cette fonction dans une page web, mais mois je veux l'utiliser dans une appli Java

      Est ce que vous savez où je peux trouver quelques tuyaux sur ça ?

      Merci d'avance

      Stéphane
      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2011 à 7:55:08

        Plop,

        En fonction de la librairie utilisée pour ton client lourd, les listener varient. Par défaut, si tu utilises Swing, tu peux aller voir ici.

        Tu trouveras d'autres listeners via la javaoc d'Oracle (KeyListener pour les touches du clavier, PropertyChangeListener lors du changement d'une propriété définie, ...)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          1 juillet 2011 à 11:41:07

          Salut, tu peux peut-être regarder du côté de la classe java.awt.Robot qui permet de placer la souris, simuler un clic, etc...
          • Partager sur Facebook
          • Partager sur Twitter
            16 juillet 2011 à 19:11:39

            Hey,

            ca y est, j'ai résolu mon problème

            Le probleme que j'avais était de transférer un évènement souris sur toute les couches d'une application graphique multi-layered

            http://www.vinylfox.com/forwarding-mouse-events-through-layers/

            (La solution proposée par ce site ne plaisait pas car il faut activer/désactiver les couches, et mon appli finale peut avoir jusque 20 couches, donc pas trop la bonne solution dans mon cas)


            Après plusieurs heures de recherche, voici comment je m'en sors (voir code ci-dessous)
            Il faut étendre la solution pour toutes les différentes actions de la souris, et il y a aussi un probléme de référence(x,y) à optimiser (Décalage due aux bordure de la frame
            topJf = jf.getInsets().top;
            bottomJf = jf.getInsets().bottom;
            leftJf = jf.getInsets().left;
            rightJf = jf.getInsets().right;)
            mais le cœur de mon moteur pour transmettre l'évènement souris est là :°))

            public class appli_3 extends JPanel implements MouseMotionListener
            {
            
            MouseEvent mice = null;
            
            	public appli_3()
            	{
            		appli_3_layer_1 = new appli_3_layer_1(this, jf_appli);
            		appli_3_layer_0 = new appli_3_layer_0(this, jf_appli);
            
            		jf_appli.add(appli_3_layer_1);
            		jf_appli.add(appli_3_layer_0);
            
            		jf_appli.addMouseMotionListener(this);
            	}
            
            public void mouseMoved(MouseEvent e){
            
            		createMouseEvent(e);
            }
            
            
            public void  createMouseEvent(MouseEvent e)
            {
            	Point sourcePoint = new Point();
            	sourcePoint.x= e.getX();
            	sourcePoint.y= e.getY();
            		
            	MouseEvent mice = new MouseEvent(this,  MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0,
            	    		sourcePoint.x, sourcePoint.y, 0, false);
            	    dispatcherMouseEvent(mice);
            		mice = null;
            }
            
            
            public void  dispatcherMouseEvent(MouseEvent e)
            {
            	appli_3_layer_0.dispatcherMouseEvent(e);
            	appli_3_layer_1.dispatcherMouseEvent(e);
            }
            	
            
            
            ************************************************
            public class appli_3_layer_1 extends JLayeredPane implements MouseMotionListener
            {
            
            appli_3_layer_1()
            {
            // Ne pas déclarer addMousMotionListener ici aussinon le mouse event
            // écouté n'est pas celui fourni par le dispatcher ci-dessous
            // this.addMouseMotionListener(this);
            }
            
            public void dispatcherMouseEvent(MouseEvent e){
            	mice = e;
            	this.dispatchEvent(mice);
            	
            	mouseMoved(mice);
            }
            		
            	public void mouseMoved(MouseEvent e){... A implementer en fnction du besoin
            



            La solution Robot ne marchait pas car Robot me permet de naviguer horizontalement sur une couche donnée, mais ne me permettait pas de naviguer dans le sens de la profondeur (En tous cas ma connaissance de Robot, je ne l'ai utilisé qu'une fois, donc je ne suis pas un cador dans les possibilité offerte par Robot)


            Tous commentaires sur le code est bienvenue.

            Voili voilou

            Stéphane
            • Partager sur Facebook
            • Partager sur Twitter

            initMouseEvent

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown