Bonjour,
J'ai un petit souci concernant les tooltip. Je crée un bouton customisé pour faire apparaitre dans un tooltip un texte et une image.

Lorsque j'inclus du texte sous un format html, celui n'est pas pris en compte. Par exemple en faisant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ButtonTooltip myButton = new ButtonTooltip(myIcon, "<html><b> Ma  phrase .</b></html>");
Pour un bouton classique Jbutton il n'y a pas de problème.

Est-ce qu'il y a une autre méthode à redéfinir que cretaeTooltip pour ça ?

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
public class ButtonTooltip extends JButton {
 
  private ImageIcon icon;
 
  public ButtonTooltip (ImageIcon icon, String tooltipText) {
    super(icon);
    this.icon= icon;
    setToolTipText(tooltipText);
  }
 
  @Override
  public JToolTip createToolTip() {
    MyToolTip tip = new MyToolTip(icon);
    tip.setComponent(this);
    return tip;
  }
 
}
 
private static class MyToolTip extends JToolTip {
    public MyToolTip(ImageIcon icon) {
      setUI(new ImageToolTipUI(icon));
    }
  }
 
private static class ImageToolTipUI extends MetalToolTipUI {
    private final ImageIcon icon;
 
    public ImageToolTipUI(ImageIcon icon) {
      super();
      this.icon = icon;
    }
 
    @Override
    public void paint(Graphics g, JComponent c) {
      FontMetrics metrics = c.getFontMetrics(g.getFont());
      g.setColor(c.getForeground());
      g.drawString(((JToolTip) c).getTipText(), 1, 1);
      g.drawImage(imageIcon.getImage(), 1, metrics.getHeight(), c);
    }
 
    @Override
    public Dimension getPreferredSize(JComponent c) {
      FontMetrics metrics = c.getFontMetrics(c.getFont());
      String tipText = ((JToolTip) c).getTipText();
      if (tipText == null) {
        tipText = "";
      }
      Image image = imageIcon.getImage();
      int width = SwingUtilities.computeStringWidth(metrics, tipText);
      int height = metrics.getHeight() + image.getHeight(c);
 
      if (width < image.getWidth(c)) {
        width = image.getWidth(c);
      }
      return new Dimension(width, height);
    }
  }