Doter un JTextComponent d'un tooltip

Aller en bas

Doter un JTextComponent d'un tooltip Empty Doter un JTextComponent d'un tooltip

Message  Gus le Jeu 3 Sep - 5:09

Voici une entité qui permet de doter n'importe quel objet JTextComponent d'une fonctionnalité de tooltip qui fait afficher dans une bulle chaque mot du texte lorsque vous passez la souris dessus.

gus.graphic.textcomp.tooltip

Cette entité comporte deux classes dont le code source est donné ci-dessous :

Code:
package gus05.entity.gus.graphic.textcomp.tooltip;

import javax.swing.text.JTextComponent;
import gus05.framework.core.Entity;
import gus05.framework.features.Give;

public class TextCompTooltip implements Entity, Give {

    public String getName()         {return "gus.graphic.textcomp.tooltip";}
    public String getCreationDate()      {return "2006.08.15";}

    public void give(Object obj) throws Exception
    {
        JTextComponent comp = (JTextComponent) obj;
        new TooltipHandler(comp);
    }
}

Code:
package gus05.entity.gus.graphic.textcomp.tooltip;

import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.text.JTextComponent;

public class TooltipHandler implements MouseMotionListener {

    public static String wordDelimListing = "\n\r\t/\\[\\] ,;(){}!:=\\-\"\\*\\.\\?\\+<>&";

   
    private JTextComponent comp;
   
    public TooltipHandler(JTextComponent comp)
    {
        this.comp = comp;
        comp.addMouseMotionListener(this);
    }

   
    public void mouseDragged(MouseEvent e) {}
    public void mouseMoved(MouseEvent e)
    {
        Point p = e.getPoint();
        String word = findWord(p);
        comp.setToolTipText(word);
    }
   
   
    private String findWord(Point p)
    {
        int pos = comp.viewToModel(p);
        String text = comp.getText();
        int length = text.length();
        if(length==0)return null;
        if(pos>=length)return null;
       
        // find word start position
        int start = pos;
        while(start>0 && !isDelimChar(text.charAt(start)))
        {start--;}
       
        // find word end position
        int end = pos;
        while(end<length && !isDelimChar(text.charAt(end)))
        {end++;}
       
        if(start<end)return text.substring(start+1,end);
        else return null;
    }
   
    private boolean isDelimChar(char c)
    {return wordDelimListing.contains(""+c);}
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum