# Mauszeiger über Button



## Gast (24. Nov 2005)

Hallo!

Ich möchte gerne ein JWindow einblenden, sobald man sich mit dem Mauszeiger über einem JButton befindet. 

Mein erster Versuch war einen MouseListener an den Button zu hängen und in der Methode mouseEntered das Fenster einzublenden und in mouseExited das Fenster wieder auszublenden. Leider funktioniert das nicht, weil das eingeblendete Fenster fürchterlich flackert. Das dürfte irgendetwas mit dem Focus zu tun haben: Ich denke, dass sobald das JWindow eingeblendet wird, der Button bzw. das Applikationsfenster den Focus verliert und dann irgendwie die "mouseExited" - Methode aufgerufen wird und das JWindow wieder geschlossen wird, dann der Button/Applikationsfenster wieder den Fokus erhält und die "mouseEntered" - Methode aufgrufen wird usw. Deshalb hab ich #JWindow.setFocusable(false) aufgerufen, was aber auch nichts geändert hat.

Dann hab ich es mit einem MouseMotionListener versucht:


```
public void mouseMoved(MouseEvent e)
{
    if (btn.contains(e.getX(), e.getY()))
    {
        wnd.setLocationRelativeTo(btn);
        wnd.setVisible(true);
     }
     else
         wnd.setVisible(false);
}
```

Leider funktioniert das auch nicht. Irgendwie scheint die contains-Methode ein anderes Koordinatensystem zu verwenden, als die Koordinaten, die im MouseEvent zurückgegeben werden.

Wie kann ich feststellen, ob sich der Mauszeiger über dem Button befindet?


----------



## The_S (24. Nov 2005)

Ich halte es für ziemlich sinnfrei dass Fenster wieder zu schließen sobald du den Button verlässt, da dann ja immer beim aufrufen des Fensters selbiges wieder geschlossen wird, sobald es geschlossen ist befindet sich der MouseListener ja wieder im Fenster, also wird es wieder aufgerufen ...

Warum willst du es wieder schließen sobald man vom Button runter ist?


----------



## Mag1c (24. Nov 2005)

Und

warum muß es überhaupt ein JWindow sein ? Wäre da ein Popup nicht besser geeignet ?

Gruß
Mag1c


----------



## Guest (24. Nov 2005)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Warum willst du es wieder schließen sobald man vom Button runter ist?




Ich möchte so eine Art Tooltip für den Button machen. Allerdings sollte die nicht jedesmal erscheinen, sondern nur unter bestimmten Voraussetzungen.  



			
				Mag1c hat gesagt.:
			
		

> warum muß es überhaupt ein JWindow sein ? Wäre da ein Popup nicht besser geeignet ?



Danke für den Tip!
Popup kannte ich bis jetzt noch nicht. Hab es mal ausprobiert (in Verbindung mit dem MouseListener) und das Flackern ist weg. 

Das Problem, das ich jetzt noch habe ist die Position des Popups. Der Button befindet sich in einem Panel, das sich wiederum im Haupfenster (BorderLayout.SOUTH) befindet. Ich möchte nun, dass das Popup ähnlich wie bei einem Tooltip in der Nähe des Buttons erscheint.

Die Koordinaten des MouseEvents kann ich da nicht nehmen, weil die relativ zur Position des Buttons sind,
button.getLocation() funktioniert auch nicht, da das die Koordaten relativ zum Panel liefert und nicht relativ zum gesamten Fenster.

Wie kann man die Position des Buttons und/oder die Position des Mauszeigers relativ zum gesamten Fenster bestimmen?


----------



## Mag1c (24. Nov 2005)

Hi,

ich glaube, du brauchst Screen-Koordinaten und die bekommst du mit Component#getLocationOnScreen.

Gruß
Mag1c


----------



## Guest (24. Nov 2005)

Hallo Mag1c!

Besten Dank für Deine Hilfe. Damit ist mein Problem gelöst.


----------



## Illuvatar (24. Nov 2005)

Also ich denke da wäre ein Tooltip am besten geeignet ???:L
JComponent#setToolTipText
oder bei ToolTipManager schauen für kompliziertere mit nicht nur Text.


----------



## Guest (25. Nov 2005)

Hallo Illuvatar!

Das Problem mit Tooltips ist, dass die ja immer angezeigt werden, wenn man sich mit dem Mauszeiger über dem Button befindet, oder gibt es da eine Möglichkeit dies zu beeinflussen. Ich möchte nämlich den "Tooltip" nur unter bestimmten Voraussetzungen anzeigen.


----------



## The_S (25. Nov 2005)

Was sind denn diese Vorraussetzungen?


----------



## Guest (25. Nov 2005)

z.B. Tooltip nur anzeigen, wenn der Button enabled ist.


----------



## The_S (25. Nov 2005)

Hier könntest du z. B. wenn der Button disabled wird den Tooltip gleich mit Disablen.


----------



## Guest (25. Nov 2005)

Ok, ihr habt mich überzeugt! Ein Tooltip ist hier offensichtlich doch die bessere Lösung. 

Nochmal vielen Dank an alle, die mir hier geholfen haben!  :toll:


----------



## Guest (25. Nov 2005)

Hab jetzt doch noch eine Frage.

Wenn ich eine eigene Tooltipklasse schreiben will. Wie kann man die dann für den Button setzen. Ich hab da nur die Methode setTooltipText gefunden, aber kein setTooltip oder sowas ähnliches.


----------



## Guest (25. Nov 2005)

Hallo!

Hab es gerade herausgefunden. So, wie es aussieht, muß man die createToolTip() - Methode aus JComponent überschreiben. Z.B.:


```
public class MyToolTip extends JToolTip
{
   ...
}

public class MyButton extends JButton
{
    public JToolTip createToolTip()
    {
        JToolTip toolTip = super.createToolTip();
        tooltip = new MyToolTip();
        return toolTip;
    }
}
```


----------

