2009-04-16 18 views
5

Ich versuche, ein schubladenähnliches Feature von OS X in Java zu implementieren, und deshalb werde ich ein Fenster unter einem anderen verstecken. Wenn ich jedoch das primäre Fenster (JFrame) ziehe, muss ich Updates senden, während es sich zum sekundären Fenster (JWindow) bewegt.Ereignisse zum Ziehen von Fenstern in Java

Also würde es so etwas wie dieses ...

--------------- 
|    |---------- 
| JFrame |   | 
|    | JWidow | 
|    |   | 
|    |   | 
|    |   | 
|    |----------- 
--------------- 

Das heißt, nicht ComponentListener in OS X nicht konstant Updates für componentMoved senden, wenn Sie nur für eine Sekunde anhalten oder die Maus abheben. Dies scheint sich von Win/Linux zu unterscheiden, also fragte ich mich, ob jemand eine andere Lösung hatte.

Ohne alles vollständig zu verstehen, hatte ich gehofft, zu bekommen und damit umzugehen, was die Titelleiste des Fensters zeichnet (etwas über die Rootpane scheint es). Ich bin mir nicht einmal sicher, ob das möglich sein wird, aber es ist die einzige andere Lösung, die ich mir vorstellen kann, wenn das ganze Fenster gezogen wird.

Jede Hilfe wird geschätzt!

+0

Ich hätte angeben sollen, verwende ich eine JFrame als primäre und planen Sie mit einer JWindow für die sekundäre. – dustins

Antwort

1

Angenommen, Sie haben einen vertrauenswürdigen Code, können Sie MouseInfo.getPointerInfo() verwenden, um die Position des Zeigers abzurufen. Diese Information kann abgefragt werden, so dass Sie herausfinden können, wo das Fenster sein sollte. Sie können nur abfragen, wo das Fenster ist.

+0

Ich bin mir nicht sicher, wie das hilfreich wäre. Die Cursorposition scheint nicht zu helfen zu wissen, wann der Haupt-JFrame bewegt wird, oder? Ich hatte gehofft, es ist möglich zu wissen, wann mouseDown auf die Titelleiste gefeuert wird und dann jwindow pos aktualisieren. für jede Maus, die danach gezerrt wird. – dustins

+2

Sie können herausfinden, wo sich der Zeiger befindet, wenn sich das Fenster bewegt, und dann herausfinden, wo der Zeiger von dort sein soll. Auch wenn Sie nicht PL & F-dekorierte Rahmen verwenden, werden Sie das Mouse-Down-Ereignis nicht erhalten. –

1

Können Sie einen mouseMotionListener verwenden, um zu sehen, ob sich die Maus bewegt, und wenn dies der Fall ist, aktualisieren Sie die Position des zweiten Fensters mit getLocation(). Sie können auch überprüfen, ob die aktuelle Position der vorherigen Position entspricht, um Ressourcenverschwendung zu vermeiden. Ich bin mir nicht sicher, ob getLocation() funktioniert, aber es hängt wirklich davon ab, wie das Betriebssystem es behandelt.