scrollable Tooltip

Status
Nicht offen für weitere Antworten.

GilbertGrape

Bekanntes Mitglied
Hallöchen,

gibt es da was um dem Tooltip ne maximale Größe mitzugeben und den Rest dann über Scrollbalken erreichen lassen.
Also so wie in Eclipse?

Danke, GG

PS:Google+Forum konnten mir beim obigen Suchbegriff nicht so richtig helfen :)
 

André Uhres

Top Contributor
JScrollableToolTip

Der Code von diesem scrollable Tooltip enthält eine "main"-Methode zum Testen und um zu zeigen,
wie wir "JScrollableToolTip" benutzen können.

Bemerkung für Tooltip in einer JTable:
  • Wenn wir "JScrollableToolTip" für die Zellen einer JTable benutzen wollen,
    dann müssen wir wissen, daß der Renderer nur indirekt für den Tooltip zuständig ist.
    In erster Linie kümmert sich JTable um den Tooltip. Sie benutzt lediglich den Tooltiptext vom Renderer.
    Darum müssen wir JTable#createTooltip() überschreiben um eine Instanz von "JScrollableToolTip" zurückzugeben
    und nicht die createTooltip-Methode der Rendererkomponente (die wird nie aufgerufen).
Zusammenfassung der Änderungen:
  • - Man kann mit dem Mausrad scrollen, auch wenn die Maus noch über der Quellkomponente ist.
    - mouseWheelMoved veranlasst einen Reset vom DismissDelay, wenn die Maus über der Qellkomponente ist.

Code:
/*
 * JScrollableToolTip.java
 */
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class JScrollableToolTip extends JToolTip implements MouseWheelListener {
 
    private JTextArea tipArea;
    private JScrollPane scrollpane;
    private JComponent comp;
 
    /** Creates a tool tip. */
    public JScrollableToolTip(final int width, final int height) {
        this(width, height, null);
    }
 
    public JScrollableToolTip(final int width, final int height, final JComponent comp) {
        this.comp = comp;
        setPreferredSize(new Dimension(width, height));
        setLayout(new BorderLayout());
        tipArea = new JTextArea();
        tipArea.setLineWrap(true);
        tipArea.setWrapStyleWord(true);
        tipArea.setEditable(false);
        tipArea.setBackground(new Color(255, 255, 204));
        scrollpane = new JScrollPane(tipArea);
        add(scrollpane);
        if(comp != null){
            comp.addMouseWheelListener(this);
        }
    }
 
    public void mouseWheelMoved(final MouseWheelEvent e) {
        scrollpane.dispatchEvent(e);
        MouseEvent e2 = new MouseEvent(comp, MouseEvent.MOUSE_MOVED, 0, 0, 0, 0, 0, false);
        comp.dispatchEvent(e2);
    }
 
    @Override
    public void setTipText(final String tipText) {
        String oldValue = this.tipArea.getText();
        tipArea.setText(tipText);
        tipArea.setCaretPosition(0);
        firePropertyChange("tiptext", oldValue, tipText);
    }
 
    @Override
    public String getTipText() {
        return tipArea == null ? "" : tipArea.getText();
    }
 
    @Override
    protected String paramString() {
        String tipTextString = (tipArea.getText() != null ? tipArea.getText() : "");
 
        return super.paramString() +
                ",tipText=" + tipTextString;
    }
 
    //for testing only:
    public static void main(final String args[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 100);
        f.setLocationRelativeTo(null);
        ToolTipManager.sharedInstance().setDismissDelay(30000);
        JButton button = new JButton("Used to display...") {
 
            @Override
            public JToolTip createToolTip() {
                JScrollableToolTip tip = new JScrollableToolTip(200, 80, this);
                tip.setComponent(this);
                return tip;
            }
        };
        button.setToolTipText("Used to display a 'Tip' for a Component. " +
                "Typically components provide api to automate the process of " +
                "using ToolTips. For example, any Swing component can use the " +
                "JComponent  setToolTipText method to specify the text for a standard tooltip.");
        f.add(button);
        f.setVisible(true);
    }
}
 

GilbertGrape

Bekanntes Mitglied
Wow, das ist toll. Vielen Dank!

In meinem Kontext (TableCellRenderer) funktioniert es noch nicht so, aber ich werd mal ein bissel debuggen. Ich kann ja nicht andere meine ganze Arbeit machen lassen :wink:
 

GilbertGrape

Bekanntes Mitglied
Ok danke!
Obwohl ich das nicht so ganz verstehe. Ich mach ja im Renderer this.setToolTipText, deswegen dachte ich, dass ich auch da die Methode überschreiben muss.
 

André Uhres

Top Contributor
Die JTable ist für den Tooltip zuständig. Sie benutzt lediglich den Tooltiptext vom Renderer.
Darum müssen wir JTable#createTooltip() überschreiben um unseren angepassten Tooltip zurückzugeben.
 

GilbertGrape

Bekanntes Mitglied
Hm, es ist leider noch nicht ganz perfekt.
Da meine Spalten in der Table eine recht geringe Höhe haben, schaffe ich es nie, mit der Maus ins Scrollpane zu kommen, ohne schon den Tooltip von der nächsten Zeile zu haben. Aus diesem Grund wollte ich ich den ToolTip etwas nach oben verschieben, sodass das Tooltip auf der gleichen Höhe ist wie die Zeile.
Dafür habe ich die Methode getToolTipLocation überschrieben, und zwar so:

Code:
public Point getToolTipLocation(MouseEvent event) {
//		return new Point(20, -30);
		return new Point(super.getToolTipLocation(event).x, super.getToolTipLocation(event).y-10);
	}

Aber da kommt immer eine NullPointerException, weil getToolTipLocation in JComponent immer null zurückgibt. Wenn ich einen festen Punkt (siehe Kommentar) zurückgebe, funktioniert das, aber ich will die Position ja relativ zu der ursprünglichen Position haben.
Wie komme ich denn an die richtige Position?

Danke, GG
 

André Uhres

Top Contributor
Versuch's mal so:
Code:
@Override
public Point getToolTipLocation(MouseEvent event) {
    return event.getPoint();
}
 

André Uhres

Top Contributor
Ich habe "JScrollableToolTip" oben verbessert.
Man kann jetzt die Quellkomponente im Konstruktor übergeben.
In dem Fall wird das Mausrad an die Quellkomponente gebunden,
so daß man scrollen kann, auch wenn die Maus noch über der Quellkomponente ist.

Das löst gleichzeitig das Problem, das man hat, wenn der Tooltip einer Komponente ausserhalb
der Grenzen der Komponente erscheint: wenn man dann die Maus von der Komponente
zum Tooltip bewegt um nach unten scrollen zu können, verschwindet der Tooltip!

EDIT: Bei "mouseWheelMoved" wird jetzt ein Reset vom DismissDelay gemacht,
wenn die Maus über der Quellkomponent ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
P JPanel scrollable machen AWT, Swing, JavaFX & SWT 19
G Swing Scrollable JPopup AWT, Swing, JavaFX & SWT 2
A SWT Scrollable Composite innerhalb eines Composites AWT, Swing, JavaFX & SWT 3
C Swing: Bild scrollable? AWT, Swing, JavaFX & SWT 6
B Scrollable - Wie benutzt man das Interface richtig? AWT, Swing, JavaFX & SWT 5
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
M JavaFX JAVAFX TreeItem mit Tooltip versehen AWT, Swing, JavaFX & SWT 4
M JavaFX Tooltip bei setOnMouseMoved Verständnisproblem AWT, Swing, JavaFX & SWT 6
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
M Datenbanksätze in ToolTip laden AWT, Swing, JavaFX & SWT 4
Tom299 JavaFX Tooltip verbuggt? AWT, Swing, JavaFX & SWT 1
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
U drawLine mit Tooltip AWT, Swing, JavaFX & SWT 1
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
B JavaFX Tooltip auf ImageView AWT, Swing, JavaFX & SWT 6
U Tooltip Dauer setzen AWT, Swing, JavaFX & SWT 0
U ToolTip Größenänderung, passt sich erst beim zweiten Mal an AWT, Swing, JavaFX & SWT 6
F ToolTip mit Link zum anklicken AWT, Swing, JavaFX & SWT 2
S SWT: Drop-Down Menü-Einträge mit Tooltip hervorheben AWT, Swing, JavaFX & SWT 3
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
GianaSisters Swing jComboBox Tooltip funktioniert nicht AWT, Swing, JavaFX & SWT 17
6 ToolTip erzwingen AWT, Swing, JavaFX & SWT 6
R SWT Tooltip AWT, Swing, JavaFX & SWT 5
J jList, recht Maustast => Tooltip zu Element AWT, Swing, JavaFX & SWT 8
T Tooltip bei falscher Eingabe anzeigen AWT, Swing, JavaFX & SWT 2
hdi Problem mit ToolTip: Aussehen/Verzögerung AWT, Swing, JavaFX & SWT 7
P Tooltip "erzwingen" ? AWT, Swing, JavaFX & SWT 7
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
Antoras Swing Tooltip permanet anzeigen AWT, Swing, JavaFX & SWT 5
W Verzögerung à la Tooltip bei mouseEntered AWT, Swing, JavaFX & SWT 19
G Tooltip anzeigen AWT, Swing, JavaFX & SWT 4
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
GilbertGrape JTable+Tooltip+Zeilenumbrüche AWT, Swing, JavaFX & SWT 7
M Tooltip anzeigen? AWT, Swing, JavaFX & SWT 3
J Anzeigedauer eines Tooltip? AWT, Swing, JavaFX & SWT 5
S Tooltip Frage AWT, Swing, JavaFX & SWT 3
G 'Spezieller' Tooltip, wenn JTable-Column zu schmal AWT, Swing, JavaFX & SWT 6
P JRE 6 -> ToolTip & mnemonic Anzeige AWT, Swing, JavaFX & SWT 4
G Tooltip Zeilenumbruch AWT, Swing, JavaFX & SWT 13
B ToolTip verändern / selbst gestalten AWT, Swing, JavaFX & SWT 3
F ToolTip auf Canvas AWT, Swing, JavaFX & SWT 2
S Tooltip auf Toolbar-Icon AWT, Swing, JavaFX & SWT 6
C Tooltip nur anzeigen, wenn JInternalFrame minimiert AWT, Swing, JavaFX & SWT 3
D Eigenes Tooltip AWT, Swing, JavaFX & SWT 5
M JTree: Tooltip wenn Text nicht vollständig angezeigt wird AWT, Swing, JavaFX & SWT 3
M Seltsames Verhalten Tooltip und JDialog AWT, Swing, JavaFX & SWT 8
I JTable, Tooltip, HTML AWT, Swing, JavaFX & SWT 2
S ToolTip an Mausposition anzeigen AWT, Swing, JavaFX & SWT 5
O Hintergrundfarbe beim ToolTip AWT, Swing, JavaFX & SWT 5
L JLabel als Tooltip AWT, Swing, JavaFX & SWT 3
G Tooltip aufpoppen lassen AWT, Swing, JavaFX & SWT 3
M Border in ToolTip AWT, Swing, JavaFX & SWT 5
F ToolTip über Line2D bzw. Rectangle2D AWT, Swing, JavaFX & SWT 5
R JTable: Jede Zelle mit eigenem ToolTip belegen AWT, Swing, JavaFX & SWT 5
G Tooltip sperrt MouseListener? AWT, Swing, JavaFX & SWT 6
V Tooltip Text auf Spaltenkopf (JTable) AWT, Swing, JavaFX & SWT 4
S Tooltip auf Kopf eine JTable? AWT, Swing, JavaFX & SWT 2
G ToolTip AWT, Swing, JavaFX & SWT 4
W Bei hinzufügen der Action verliert Button Text,Tooltip, etc AWT, Swing, JavaFX & SWT 5
S Tooltip mit Grafik AWT, Swing, JavaFX & SWT 2
N lightweight bei ToolTip AWT, Swing, JavaFX & SWT 2
kaory Variabler ToolTip-Text in JTable AWT, Swing, JavaFX & SWT 5
T ToolTip AWT, Swing, JavaFX & SWT 3
R ToolTip länger aufrecht erhalten AWT, Swing, JavaFX & SWT 3
S ToolTip erweitern bei Swing (Mehrzeilig) AWT, Swing, JavaFX & SWT 2
M Tooltip / neues Fenster AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben