Advanced   Java   Services
JToolTip
Back Next Up Home

In der Klasse JComponent gibt es die Methode setToolTipText(). Mit ihr kann man für alle Swingkomponenten, die sich von JComponent ableiten Tooltips setzen. Man kann sich darüber streiten, ob der violette Hintergrund für Tooltips im metalLook eine gute Wahl war. Es gibt auf jeden Fall mehrere Möglichkeiten, das Aussehen der Tooltips zu verändern.


Defaultwerte im UIManager durch eigene Ersetzen


Die Klasse UIManager verwaltet eine key-value Tabelle mit Defaultwerten für das Erscheinungsbild der Swingklassen. Die komplette Liste dieser Wertepaare finden sie in Komplette Liste der UIDefaults.

Den für ToolTips zuständigen Teil finden sie unter UIDefaults für JToolTip.

Die Klasse UIManager bietet die Methode static Object put(Object key, Object value) zum Setzen bzw. ändern der Werte an. Die Schlüssel holt man sich aus der obigen Tabelle. Sie sind immer Strings, also z.B.

Color motifColor = new Color(255,247,233);
UIManager.put("ToolTip.background", motifColor ) ;

Diese Neueinstellung wirkt sich dann aber auf alle ToolTips der jeweiligen Anwendung aus.


Individuelle Tooltips mit HTML


Die Swingklassen verstehen HTML. Das ist der einfchste Weg, um etwa mehrzeilige Labels oder Buttons zu erzeugen. Außerdem kann man mit HTML auch Textfarbe und Hintergrundfarbe ändern. Wie man HTML hier einsetzt, wird am schnellsten durch ein Beispiel klar. Das folgende Statement erzeugt ein zweizeiliges Tooltip.

jcomp.setToolTipText("<html><div align=center>This is a Tooltip<br> " +
                     "which has two lines!</div></html>");

Hier noch ein Beispiel, das auch Textfarbe und Hintergrundfarbe verändert.

jcomp.setToolTipText("<html><body bgcolor=#00ffff text=#ff0000> +
                     "<div align=center>This is a Tooltip with two lines<br>" +
                     "and custom colored background and text</div></body></html>");

Dabei ist jcomp irgendein Objekt einer Ableitung von JComponent.


Individuelle Tooltips durch Überschreiben der Methode createTooltip()


Die Methode createToolTip() aus der Klasse JComponent schaut im Original wie folgt aus.

public JToolTip createToolTip()
{
   JToolTip tip = new JToolTip();
   tip.setComponent(this);
   return tip;
}

Aufgerufen wird diese Methode über den ToolTipManager, wobei, wie man sieht, jedesmal ein neues ToolTip erzeugt wird. Es nützt also nichts, die Methode selbst aufzurufen, da der ToolTipManager sie erst aufruft, wenn man mit der Maus über der Komponente verweilt. Um ein Tooltip auf diese Weise zu konfigurieren, muß man die Methode überscheiben und das erste Statement entfernen. Am elegantesten macht man das in einer anonymen Klasse. Im folgenden wird das für ein JLabel vorgeführt.

lab = new JLabel("", JLabel.CENTER)
   {
      JToolTip tip = new JToolTip();

      public JToolTip createToolTip()
      {
         tip.setComponent(this);
         return tip;
      }
   };

Auf diese weise muß der ToolTipManager immer mit dem selben ToolTip Objekt arbeiten. Dieses kann man nun wie folgt konfigurieren.

JToolTip tt = lab.createToolTip();
tt.setBackground(Color.yellow);
tt.setForeground(Color.black);
lab.setToolTipText("overriding createToolTip() in an anonymous class works fine");

Natürlich geht es mit HTML "einfacher", aber Java ist schöner...

top Back Next Up Home