# JInternalFrame mouseEntered/mouseExited



## MadHatter (21. Feb 2007)

Hi,
ich hab ein kompliziertes Problem und hoffe ihr könnt mir helfen.
Also erstmal habe ich ein JInternalFrame. Dieser soll möglichst wenig nerven, und das möchte ich dadurch erreichen, dass das Fenster nur so groß ist, dass nur die Titelleiste des JInternalFrames sichtbar ist. Wenn nun die Maus auf die Titelleiste bewegt wird, soll sich das Fenster wieder vergrößern, sodass man den Inhalt gut sehen kann. Verlässt die Maus wieder das Fenster, soll das JInternalFrame wieder klein werden. Vielleicht kennen einige von euch solche "Fenster" von VisualStudio .NET.
Bis jetzt habe ich es wie folgt realisiert: Mein JInternalFrame hat einen MouseListener, der bei mouseExited den Fenster verkleinert und bei mouseEntered den Fenster wieder vergrößert. Das lief eigentlich ganz gut bis....
Und nun mein Problem: Jetzt habe ich noch ein JButton in diesem JInternalFrame. Sobald die Maus über den JButton geht, kriegt das JInternalFrame ein mouseExited Event, es minimiert/verkleinert sich wieder. Ich hab mir selber auch eine Komponente geschrieben (abgeleitet von JComponent), die nicht für ein mouseExited Signal sorgt. Auch JPanel macht sowas nicht. Aber JButton bringt mein JInternalFrame zum minimieren.

Was ist das Problem? Wie kann ich das lösen? Bzw. gibt es bessere Ansätze?

Ich danke für jede Hilfe


----------



## The_S (21. Feb 2007)

Spontan:

Überprüfe anhand der Mauskoordinaten, der Location des Fensters und der Größe des Fensters ob sich die Maus wirklich außerhalb des JInternalFrames befindet oder nicht.


----------



## Wildcard (21. Feb 2007)

So in die Richtung:

```
internalFrame.getBounds().contains(e.getPoint)
```


----------



## Gast (21. Feb 2007)

Hi 

ich hab nicht so die große Ahnung von Oberflächen aber gibt es nicht eine Übergeordnete Schicht die über allem liegt an der man dan MouseListener anmelden kann?

MfG
Patrick


----------



## MadHatter (21. Feb 2007)

Hi,
also folgendes klappt jetzt einigermaßen:

```
public void mouseEntered(MouseEvent e)
    {   
        setHeight(HEIGHT_UP);
        serializeTool();
    }

    public void mouseExited(MouseEvent e)
    {
        if(e.getX()>this.getWidth() || e.getY()>this.getHeight() || e.getX()<HEIGHT_DOWN || e.getY()<HEIGHT_DOWN)
        {
            setHeight(HEIGHT_DOWN);
            serializeTool();
        }
    }
```
Wobei HEIGHT_DOWN die Höhe der Titelleiste darstellen soll, welche ich im Moment durch annähern herausgefunden habe. Jedoch gilt sie natürlich nur für dieses Look&Feel :-( und ist total plattformabhängig - wie kriege ich die Höhe der Titelleiste des JInternelFrames denn anständig raus?
Außerdem ein größeres Problem: Irgendwie ist das JButton nicht anklickbar! Man kann zwar draufklicken, aber alles was passiert, ist dass es fokusiert wird. Sonst nix. Um den ActionEvent ausrufen zu können drück ich danach Space, was aber schon doof ist...


----------



## MadHatter (23. Feb 2007)

Hat keiner mehr eine Idee wie ich die neu aufgetretenen Probleme lösen kann? Warum ist das JButton nicht richtig anklickbar?


----------



## MadHatter (24. Feb 2007)

Also das Problem war, dass ich das JInternalFrame so eingestellt habe, dass es nicht fokusierbar sein soll, aber die enthaltenen Buttons sollten trotzdem anklickbar sein, dies ging aber nicht. Die Lösung ist nun: Button.setFocusable(false) und dann klappts auch super.


----------



## siroFranz (24. Feb 2007)

würde gerne helfen :###


----------



## MadHatter (24. Feb 2007)

Aja die Größe auf die Titelleiste zu beschränken hab ich wie folgt gelöst (also die Antwort lag darin nicht die Größe herauszufinden sondern es dazu zu bringen, alles außer der Titelleiste (und den Rahmen) anzuzeigen):

```
Container empty = new Container();
InternalFrame.setContentPane(empty);
```

und bei mouseover:

```
InternalFrame.setContentPane(content);  // wobei content das Container mit Buttons etc. ist
```

@siroFranz:
ich versteh nicht ganz was du meinst?!


----------

