Advanced
Java
Services
|
JToolTip |
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...