2011-08-21 3 views
8

Java Swing question.Swing: Comment créer un widget JToolTip personnalisé qui se déplace avec la souris

J'ai un JPanel qui affiche un graphique. Lorsque je déplace la souris sur ce graphique, je veux que certaines informations soient affichées sur un widget semblable à une info-bulle qui se déplace avec la souris. Comment puis-je le mieux implémenter cela?

Je suppose que mon problème sera résolu si je sais comment positionner un composant JComponent absolument dans le JPanel qui sert de canevas de dessin. Je pourrais alors piéger l'événement déplacé de la souris et repositionner/mettre à jour le widget. Toute autre solution (y compris éventuellement utiliser JToolTip directement) serait également la bienvenue!

Excuses si cette question est un peu basique. Cela fait vraiment très longtemps que je n'ai plus utilisé Swing, donc je réapprends toujours à travailler avec. Merci d'avance! Remplacez la méthode getToolTipText(MouseEvent) pour définir dynamiquement la pointe de l'outil en fonction de l'emplacement de la souris.

+0

qui n'est pas tâche facile, tous les exemples que je voyais étaient trop long et basé sur le modèle de JComponent + SwingUtilities + JWindow, peut-être que quelqu'un a easies idée – mKorbel

Répondre

8

Edit:

Si vous voulez que l'info-bulle pour se déplacer en permanence avec la souris, vous aurez besoin aussi de surcharger la méthode getToolTipLocation().

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ToolTipPanel extends JPanel 
{ 
    public ToolTipPanel() 
    { 
     setPreferredSize(new Dimension(200, 200)); 
     setToolTipText(""); 
    } 

    public void paintComponent(Graphics g) 
    { 
     g.setColor(Color.red); 
     g.fillRect(0, 0, 100, 200); 
     g.setColor(Color.blue); 
     g.fillRect(100, 0, 100, 200); 
    } 

    public String getToolTipText(MouseEvent e) 
    { 
     if (e.getX() < 100) 
      return "red"; 
     else 
      return "blue"; 
    } 

    public Point getToolTipLocation(MouseEvent e) 
    { 
     Point p = e.getPoint(); 
     p.y += 15; 
     return p; 
//  return super.getToolTipLocation(e); 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ToolTipPanel()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

peut-être, mais je n'a jamais vu infobulle volant/suit la souris sur l'écran et avec la connexion à la JComponent sous la souris Curseur +1 – mKorbel

+0

@ mKorbel, voir éditer. – camickr

+0

merci très bel exemple, alors quelle serait la meilleure option 1) pour vérifier JComponent en utilisant SwingUtilities, puis modifier les propriétés de l'info-bulle à partir de certains pré-préparés Array 2) set tooltip uniquement pour JComponent attendus directement et dans ce cas JComponet renvoie les propriétés à l'info-bulle – mKorbel

Questions connexes