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

Interfaces Graphiques en Java Discussion :

ajouter les "MouseListener" sur les bons objets


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut ajouter les "MouseListener" sur les bons objets
    Bonjour à tous, je profite des vacances, pour travailler à nouveau sur mon logiciel de schéma électrique.
    J'ai bien avancé, ça fonctionne pas mal, mais j'ai un problème concernant les listeners...

    Mon interface ressemble à ça :
    Nom : interface.png
Affichages : 197
Taille : 12,1 Ko

    Le composant principal sur fond gris, est le support des autres composants qui s'implantent dessus peu à peu au fil de l'utilisation. (composants sur fond orange et fil en bleu par exemple ici)
    C'est donc ce composant qui gère le "MouseListener", et le "MouseMotionListener" qui permettent de gérer les interactions de "click" et "Dragged" pour déplacer ou dimensionner des composants.
    En effet, quand on clique, on identifie le composant présent à cet endroit de la grille et on oriente vers les procédures dédiées.
    Le code est en partie ici :
    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
    // ---  je clique sur g1 ----------------
    	@Override
    	public void mouseClicked(MouseEvent e) { 
     
    		System.out.println("dans GRILLE.mouseClicked, je viens de cliquer sur g1");
     
    		// si je clique sur "b_gauche" en "conception :
    		if (Var.simul_en_cours == false && e.getButton() == MouseEvent.BUTTON1) {
    			Click_Gauche_Conception.clic_g1_conception(this.getMousePosition());
    		}
     
    		// si je clique sur "b_gauche" en "simulation :
    		if (Var.simul_en_cours == true && e.getButton() == MouseEvent.BUTTON1) {
    			Click_Simulation.clic_g1_simulation(this.getMousePosition());
    		}
     
    		// si je clique sur "b_droit" en "conception :
    		if (Var.simul_en_cours == false && e.getButton() == MouseEvent.BUTTON3) {
    			Click_Droit_Conception.clic_droit_conception(this.getMousePosition());
    		}
    	}
     
    	// ===  fin de je clique sur g1  =============		
     
    	@Override
    			public void mousePressed(MouseEvent e) {
     
    		// ATTENTION, l'évenement est la position de la souris par rapport à la grille une seule fois au "press"!!
     
    				cible = Var.g1.findComponentAt(e.getPoint());
    				System.out.println(" Dans GRILLE.mousePressed, le composant détecté est  : " + cible);
     
    				 dx0 =  e.getX() - cible.getX();		// écart sur x au "press" sur objet
    				 dy0 =  e.getY() - cible.getY();		  
     
     
    			}
     
    			@Override
    			public void mouseReleased(MouseEvent e) {
     
     
    			}
     
    			@Override
    			public void mouseEntered(MouseEvent e) {
     
     
     
    			}
     
    			@Override
    			public void mouseExited(MouseEvent e) {
     
    			}
     
     
    			// ---  je dragged sur g1 ----------------
    			@Override
    			public void mouseDragged(MouseEvent e) {
     
    				Controle_Dragged.je_traine_un_objet( cible, e, dx0, dy0);
     
     
     
    			}
    			//=========== fin de méthode dragged sur segment ----
     
     
     
    			@Override
    			public void mouseMoved(MouseEvent e) {
     
     
    			}
    Mon problème est le suivant :
    Quand de je créé un conducteur, en bleu, je peux le détecter, le déplacer et le redimensionner en "trainant" les lignes élémentaires qui le composent. Ça fonctionne plutôt bien!

    Cependant, à présent, pour plus de confort d'utilisation, j'aimerais qu'au survol d'un fil, ce dernier change de couleur, afin de pouvoir le "cliquer" facilement.

    Le problème, c'est que le "MouseEnter" ou le "MouseExit" détecte dans ce cas, l'entrée ou la sortie de la grille, qui est le grand conteneur gris. C'est normal, puisque ce dernier porte le "listener" mais c'est sans intérêt pour moi.

    J'ai donc tenter d'ajouter un "listener" sur mes fils, et en effet, la détection se fait, mais dans ce cas, le "dragged" porté par la grille ne fonctionne plus...

    Question1: Le fait d'ajouter un "listener" sur plusieurs objets qui sont sur des niveaux différents, semble donner l'exclusivité au "listener" le plus haut à l'affichage. Est-ce le cas?

    Question2: Je souhaite garder la gestion des déplacements de composants, géré au niveau de la grille principale. Détecter une entrée/sortie sur un composant de type "fil" est-il possible dans ce contexte?
    (j'ai tenté de gérer directement par un "listener" sur le fil, à la fois les entrées/sorties et les déplacements/redimensionnements, mais les mouvements ne sont plus aussi fluides que gérés au niveau de la grille support.)

    Question3 : Existe-t-il une autre solution ??

    Merci à tous ceux qui ont des idées pour résoudre ce souci!...

  2. #2
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut listener sur l'objet fil
    je me réponds à moi-même après des essais.

    En fait pour que mes fils soient détectés, il doivent être porteurs d'un listener propre, ajouté à leur création (à la fois pour le survol, le click et le dragged), et être ajoutés sur la grille déjà existante,
    qui ne gérera en rien ces objets qui sont créés plus tard au fil de l'utilisation...

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

Discussions similaires

  1. [AC-2003] Création d'un code pour ajouter un mot de passe sur le bon identifiant.
    Par Chagui dans le forum VBA Access
    Réponses: 6
    Dernier message: 21/10/2010, 20h30
  2. Passer aux jsp des iterateurs pointant sur le bon objet
    Par franchouze dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 04/08/2009, 10h14
  3. Réponses: 1
    Dernier message: 17/04/2007, 23h03
  4. Pointer sur le bon Objet
    Par Cpt Anderson dans le forum Delphi
    Réponses: 4
    Dernier message: 12/02/2007, 11h36

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