Anzeigeposition vom ToolTip ändern

  • Themenstarter Gelöschtes Mitglied 56712
  • Beginndatum
G

Gelöschtes Mitglied 56712

Gast
Guten Tag
mit ...setToolTipText("text") setze ich ein ToolTip auf ein Objekt.
leider wird der ToolTip von der Maus teilweise überdeckt.

Gibt es eine Möglichkeit den ToolTip oberhalb der Mausposition [getY()] anzuzeigen?
Man kann ja mit:
Java:
UIManager.put("ToolTip.background", new Color(254, 255, 208));
z.B. den Hintergrund ändern. Gibt es sowas auch für die Position?

Für Hilfe wie ich das bewerkstelligen könnte, wäre ich sehr dankbar.

Habe es schon mit einem PopupMenu versucht.
Das funktioniert auch! Nur das Problem ist, wenn mann zu schnell mit der Maus über die Objekte fährt, bleibt ein graues Feld zurück, obwohl das Popup setVisible(false) gesetzt wurde.
 

KonradN

Super-Moderator
Mitarbeiter
Das ist meines Wissens nicht direkt beeinflussbar. Die ToolTips kommen über das UI Design von Swing.

Was Du also ggf. machen kannst: Schau einmal die vorhandenen Designs an, ob Dir da eine Tooltip Platzierung gefällt (Ich habe das bisher nicht verglichen - keine Ahnung, ob es da Unterschiede gibt...) Und dann könntest Du ggf. die ToolTipUI von dem Design nutzen?

Hintergrund: Für die Darstellung ist eine ToolTipUI Klasse verantwortlich. Diese könntest Du über den UIManager setzen:
UIManager.put("ToolTipUI", "javax.swing.plaf.metal.MetalToolTipUI");
Das wäre ein Beispiel, das für die ToolTips die Metal Implementierung verwenden würde ...

Wenn da nichts passendes dabei sein sollte, dann kannst Du natürlich auch Deine eigene Klasse schreiben und in der dann genau das machen, was Du willst. Dazu kannst Du natürlich auch auf die Sourcen zurück greifen, die es bereits so gibt:
  • javax.swing.plaf.metal.MetalToolTipUI
  • javax.swing.plaf.nimbus.NimbusToolTipUI
  • com.sun.java.swing.plaf.motif.MotifToolTipUI
  • com.sun.java.swing.plaf.windows.WindowsToolTipUI
  • com.sun.java.swing.plaf.gtk.GTKToolTipUI

Ansonsten einfach mal ein Beispiel generiert von ChatGPT (ungetestet):

Java:
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalToolTipUI;
import java.awt.*;

public class CustomToolTipUI extends MetalToolTipUI {
    private static CustomToolTipUI sharedInstance = new CustomToolTipUI();

    public static ComponentUI createUI(JComponent c) {
        return sharedInstance;
    }

    @Override
    public void paint(Graphics g, JComponent c) {
        Font font = c.getFont();
        FontMetrics metrics = c.getFontMetrics(font);
        Dimension size = c.getSize();
        g.setColor(c.getBackground());
        g.fillRect(0, 0, size.width, size.height);
        g.setColor(c.getForeground());
        g.setFont(font);
        g.drawString(((JToolTip) c).getTipText(), 5, metrics.getHeight());
    }

    @Override
    public Dimension getPreferredSize(JComponent c) {
        Font font = c.getFont();
        FontMetrics metrics = c.getFontMetrics(font);
        String text = ((JToolTip) c).getTipText();
        int width = SwingUtilities.computeStringWidth(metrics, text) + 10;
        int height = metrics.getHeight() + 4;
        return new Dimension(width, height);
    }

    @Override
    public void update(Graphics g, JComponent c) {
        g.translate(20, 10); // Tooltip Position ändern (20px rechts, 10px unten von der ursprünglichen Position)
        super.update(g, c);
    }
}

Die technischen Hintergründe konnte ich hoffentlich etwas erläutern, so dass Du da eine eigene Lösung finden kannst. Ob so eine eigene Klasse notwendig ist oder nicht, musst Du dann sehen. Evtl. ist ja eine Implementierung schon ausreichend?

Aber da auch etwas aufpassen: Es macht evtl. Sinn, das dann auf mehreren Systemen zu testen. Zum einen verschiedene Plattformen aber auch mit verschiedenen Display Settings (Also z.B. unter Windows mal das Scaling einstellen auf verschiedene Werte). So mit dem Design herum zu spielen kann unter Umständen Nebenwirkungen haben, die nur unter bestimmten Bedingungen dann unschön sind.
 
G

Gelöschtes Mitglied 56712

Gast
Vielen Dank
Dein Beispiel hat super funktioniert!

Jetzt werd ich das mal auf verschiedenen BS testen.
Vielen Dank.

Ps:
Intressant: Bei Windows funktioniert der ToolTip auch ohne die Class: CustomToolTipUI!
Bei UNIX-Systemen (Mac, Linux, etc.) sieht es nur mit CustomToolTipUI überall gleich aus.

Ich vermute mal, dass der standard ToolTip mit Informationen des BS arbeitet?
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du kein Look and Feel setzt, dann nutzt Java in der Regel das spezifische des Systems.

Wenn der Windows ToolTip ok ist, dann kann es eine interessante Idee sein, einfach die ToolTipUI Klasse vom Windows Look and Feel zu nutzen:
UIManager.put("ToolTipUI", "com.sun.java.swing.plaf.windows.WindowsToolTipUI");

Vielleicht macht das schon alles, was Du willst? Ist natürlich zu prüfen, ob das evtl. zu sehr vom üblichen Look and Feel abweicht, aber ein Tooltip hat ja eigentlich kaum Plattformspezifisches Aussehen, so dass es ok sein könnte.
 
G

Gelöschtes Mitglied 56712

Gast
Wenn ich den WindowsToolTipUI einsetze gibt es auf meinem System Fehler. (nicht aber in Windows)
UIManager.put("ToolTipUI", "com.sun.java.swing.plaf.windows.WindowsToolTipUI");
Mein System: Linux Mint 21.3 (Mate-Desktop)

Aber mit Deiner Klasse: CustomToolTipUI kann ich schon einiges für mich intressantes anpassen.
Gefällt mir und ich verwende es, weil (auch) im Windows keine Exceptions geworfen werden.

Vielen Dank für Deine Hilfe.
 

KonradN

Super-Moderator
Mitarbeiter
Ich weisz es nur vom GtkLookAndFeel dass dieses Systemabhaengig ist. Also da werden haufenweise Informationen vom System abgefragt (muss es ja, weil sont nix GTK Theme), und ich kann mir gut vorstellen dass das beim Windows Look&Feel gleich ist.
Ja, das hört sich durchaus logisch an. Damit hat die Idee einen deutlichen Haken :)

Aber mit Deiner Klasse: CustomToolTipUI kann ich schon einiges für mich intressantes anpassen.
Gefällt mir und ich verwende es, weil (auch) im Windows keine Exceptions geworfen werden.
Es freut mich, dass da doch auch eine sinnvolle Idee dabei war - wobei der Code halt auf das Konto von ChatGPT geht und von mir nur die Idee gekommen ist, sowas in der Art zu implementieren. (ChatGPT ist für so Implementationen extrem gut. Irgendwie hatte ich in den letzten Monaten keine negativen Erfahrungen mit ChatGPT mehr. Am Anfang war da öfters totaler Müll, aber so mit der 4er Version wurde es massiv besser und das war jetzt 4o)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Array Aktualisierung wird nicht im Tooltip angezeigt Java Basics - Anfänger-Themen 2
S AJAX JSP Tooltip WebApp Java Basics - Anfänger-Themen 6
L tooltip zeitgesteuert setzen Java Basics - Anfänger-Themen 3
G Text in Tooltip umbrechen lassen? Java Basics - Anfänger-Themen 4
T tooltip trotz gedrückter maustaste Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
B Variablen Int Variabel in JTextField ändern Java Basics - Anfänger-Themen 2
W Methode ändern Java Basics - Anfänger-Themen 65
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
javapingu Variablenwerte ändern ohne return Statement? Java Basics - Anfänger-Themen 7
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
B Filepath "ändern"? Java Basics - Anfänger-Themen 5
t2im Java Array-Länge ändern? Java Basics - Anfänger-Themen 22
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
J Itext-Paragraph Position ändern Java Basics - Anfänger-Themen 13
Z Attribut ändern ohne Kontrollstruktur Java Basics - Anfänger-Themen 2
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
V Umgebungsvariable Genutzte Javaversion in der Konsole ändern Java Basics - Anfänger-Themen 5
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
M Programm per Nutzereingabe ändern Java Basics - Anfänger-Themen 3
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
L Java Date Format ändern Java Basics - Anfänger-Themen 5
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
F Schriftgröße ändern Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
J Kapselung Array in Set ändern und in Main ausgeben lassen Java Basics - Anfänger-Themen 4
D scheduledAtFixedRate speed ändern Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
Henri Erste Schritte Iteration ändern Java Basics - Anfänger-Themen 12
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Cursor ändern Java Basics - Anfänger-Themen 8
B Eclipse Tabellen Farbe ändern? Java Basics - Anfänger-Themen 2
I Ordnung JLayeredPane mit Button ändern Java Basics - Anfänger-Themen 5
S Array Eintrag ändern Java Basics - Anfänger-Themen 6
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
M im String Alphabet ändern Java Basics - Anfänger-Themen 3
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
T Parameter das übergeben wurde ändern? Java Basics - Anfänger-Themen 1
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
Hijo2006 Eclipse: Java Icon ändern Java Basics - Anfänger-Themen 9
S Schriftart/Farbe im Grafikfenster ändern Java Basics - Anfänger-Themen 8
G BenutzerDaten teilweise ändern in txt Datei Java Basics - Anfänger-Themen 10
J Button in anderer Klasse ändern Java Basics - Anfänger-Themen 3
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
H Innerhalb einer Methode eine Variable der aufrufenden Methode ändern? Java Basics - Anfänger-Themen 2
Voreck Jar Dateien Standart programm ändern Java Basics - Anfänger-Themen 12
R Vererbung Variable in einem übergeordneten Objekt ändern Java Basics - Anfänger-Themen 4
R JTextArea final Status ändern Java Basics - Anfänger-Themen 11
W Methoden Methode auf Array aufrufen, und dieses Array dabei ändern? Java Basics - Anfänger-Themen 10
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
J Klassen Klassenmethode um Variable zu ändern Java Basics - Anfänger-Themen 7
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
D Eigenschaften eines Objektes ändern Java Basics - Anfänger-Themen 1
D Opencsv-3.5 DEFAULT_DATE_FORMAT ändern Java Basics - Anfänger-Themen 8
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
U Tabelle ändern und die Inhalte speichern Java Basics - Anfänger-Themen 9
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
Z JLabel Icon ändern Java Basics - Anfänger-Themen 2
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
U Farbe meines Würfels jede sekunde ändern! Java Basics - Anfänger-Themen 5
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
Z System(einstellungen) per Java ändern/Steuern | Betriebssystembezogen Java Basics - Anfänger-Themen 7
W Klassen Variable einer anderen Klasse ändern (Threads) Java Basics - Anfänger-Themen 3
E Systemzeit ändern Java Basics - Anfänger-Themen 7
W Konsolenprograamm in GUI-Programm ändern Java Basics - Anfänger-Themen 1
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
D Werte von Variablen über Methode ändern Java Basics - Anfänger-Themen 10
Jackii Globale Variable aus anderer Klasse ändern... Java Basics - Anfänger-Themen 4
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben