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 :

Info-bulle + image + souris


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut Info-bulle + image + souris
    Salut,

    pour ceux qui avaient suivi mon problème de la dernière fois et ceux qui ne l'ont pas fait. Je cherchais à afficher des info-bulles quand je déplace le curseur de ma souris en des points définis (pixels) sur une image. Ces points définis sont stockés au préalable dans une ArrayList.

    J'ai donc implémenté les méthodes mouseMoved and movedDragged de l'interface MouseMotionListener de la façon suivante pour les 2 :

    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 void mouseMoved(MouseEvent e) {
     
    		// On récupère les coordonnées du curseur
    		int latSouris = e.getY();
    		int longSouris = e.getX();
     
    		// Parcours de la liste pour trouver si une zone d'intérêt est pointée à la souris
    		int taille = listPositions.size();
    		int i = 0;
    		Zone zoneTrouve = null;
     
    		while (zoneTrouve == null && i < taille) {
     
    			Zone zone = (Zone)listPositions.get(i);
    			int latPix = zone.getLatitudePix();
    			int longPix = zone.getLongitudePix();
     
    			// On teste si cette zone est dans un rayon défini du curseur de la souris
    			if ((latPix-2<latSouris) && (latSouris<latPix+2) && (longPix-2<longSouris) && (longSouris<longPix+2)) {
    				zoneTrouve = zone;
    			}
     
    			i++;
    		}
     
    		if (zoneTrouve != null) {
    			this.setToolTipText(zoneTrouve.getInfo());
    		}
     
    	}
    J'ai aussi ajouté dans la classe principale de mon applet (méthode init) le code suivant pour que les bulles s'affichent plus vite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Délai d'affichage des info-bulles en millisecondes
    int delai = 20;
    javax.swing.ToolTipManager.sharedInstance().setInitialDelay(delai);
    Alors ce que j'observe :
    - Les info-bulles s'affichent bien et instantanément dès que je passe en un point qui doit en faire apparaître.
    - Une info-bulle, après être apparue, continue d'être affichée même quand je suis en dehors de la zone définie où rien ne devrait être vu. Elle affiche le même contenu tant que je rencontre pas un nouveau point !
    - Quand l'ArrayList contenant les positions d'affichage est vidée, plus aucune info-bulle ne devrait être visible mais ça n'est pas le cas ! Dès que l'on se déplace ou clique dans la zone de dessin, la dernière info-bulle, avant que la liste ne soit vidée, refait surface !

    C'est vraiment étrange car la condition de ma méthode ne devrait pas être vérifiée et pourtant ça n'est pas le cas ...

    C'est comme si quelque chose était gardé en mémoire !

    Merci d'avance pour vos réponses.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Personne ne voit parce que je n'ai toujours pas trouvé !

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je pense qu'il aurait été plus pratique d'utiliser une JWindow surlaquelle tu fait setVisible(true/false) celon que tu approches ou t'éloigne d'un des points réactifs.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Je n'ai pas trop saisi !
    Faire un JWindow à la place de mon JPanel où j'affiche ma carte ?

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Non à la place de ton popup. De cette manière tu n'aurais pas eut à passer par PopupManager. Ca peut permettre également d'afficher des popup plus complexes que du simple texte (ex un panel avec un zoom de l'image en dessous).

    Sinon comme je te l'indiquais à la fin de ton précédent courrier (enfin je crois que c'était toi) mais que tu n'as peut-être pas lu car il était déjà marqué comme ; il existe la méthode String getToolTipText(MouseEvent event) pour t'éviter d'avoir à écrire les MouseListener, MouseMotionListener manuellement.

    Ensuite pour ton problème, il faut penser à faire setToolTipText(null) quand tu es sortit de la zone où le popup peut s'afficher. Idem, on retourne null dans le cas ou on surcharge la méthode que je t'ai indiquée.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Donc, en gros l'idée serait de surcharger la méthode String getToolTipText(MouseEvent event) plutôt que d'implémenter les méthodes de MouseListener. Donc en plaçant le code de ces méthodes dans getToolTipText et retourner la chaîne d'intérêt. Pour surcharger, cette méthode, je dois commencer le code de la fonction par super(event) si je ne me trompe pas ?

    Je ne vois pas trop après comment faire (où) pour invoquer la méthode setToolTipText !

    Donc pas de JWindow si je fais ça ?

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui pas de JWindow.
    Et comme je n'ai pas été assez clair précédement :

    - soit tu utilises des événement comme tu le fais actuellement ; après tout il peut être utile de suivre les mouvements de la souris pour divers autres opérations. Mais tu dois remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (zoneTrouve != null) { 
      setToolTipText(zoneTrouve.getInfo()); 
    }
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String tooltip = null;
    if (zoneTrouve != null) { 
      tooltip = zoneTrouve.getInfo(); 
    } 
    setToolTipText(tooltip);
    - Soit tu surchages String getToolTipText(MouseEvent event) ; et dans cette méthode du fais exactement les mêmes opérations que dans ton mouseMouved() sauf qu'à la fin tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String tooltip = null;
    if (zoneTrouve != null) { 
      tooltip = zoneTrouve.getInfo(); 
    } 
    return tooltip;
    Pas la peine d'appeler super.getToolTipText(event).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre du Club
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Points : 49
    Points
    49
    Par défaut
    Génial, ça marche ! J'ai pris la première solution ! Comment j'ai fait pour ne pas penser à ça !

    Je peux maintenant mourir en paix enfin partir l'esprit serein en WE !

    Un grand merci à toi bouye, fan de sonic !

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

Discussions similaires

  1. Placer une image dans une info bulle
    Par koKoTis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/09/2006, 20h23
  2. [C#] Info bulle suivant la souris
    Par AlexandreP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/06/2006, 10h34
  3. Réponses: 2
    Dernier message: 09/05/2006, 10h14
  4. Info-bulle dans un calque... Pb avec evnts souris
    Par romulus dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 18h12
  5. Image + Info-bulles + Applet + Swing + souris !!!
    Par BARBIER dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 15/02/2006, 10h15

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