2009-04-16 11 views
5

Sto tentando di implementare una funzionalità simile a un cassetto di OS X in Java e quindi avrò una finestra nascosta sotto un'altra. Tuttavia quando trascino la finestra principale (JFrame) ho bisogno di inviare aggiornamenti mentre si sposta nella finestra secondaria (JWindow) sotto.Eventi per il trascinamento della finestra in Java

quindi sarebbe qualcosa di simile ...

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

Detto questo, ComponentListener in OS X non invia aggiornamenti costanti per componentMoved, solo quando si mette in pausa per un secondo o togliete il mouse. Questo sembra essere diverso da Win/Linux, quindi mi chiedevo se qualcuno avesse una soluzione diversa.

Senza comprendere completamente tutto, speravo di ottenere e gestire qualunque cosa stia disegnando la barra del titolo della finestra (qualcosa sul rootpane sembra). Non sono nemmeno sicuro se sarà possibile farlo, ma è l'unica altra soluzione che posso immaginare per determinare quando viene trascinata l'intera finestra.

Qualsiasi aiuto è apprezzato!

+0

Avrei dovuto specificare, sto usando un JFrame come primario e pianifico sull'uso di una JWindow per il secondario. – dustins

risposta

1

Supponendo di avere un codice attendibile, è possibile utilizzare MouseInfo.getPointerInfo() per ottenere la posizione del puntatore. Questa informazione può essere interrogata in modo che tu possa capire dove dovrebbe essere la finestra. Potresti essere in grado di sondare dove si trova comunque la finestra.

+0

Non sono sicuro di come sarebbe utile. La posizione del cursore non sembra essere d'aiuto quando si sa quando viene spostato il JFrame principale vero? Speravo che fosse possibile sapere quando mouseDown è attivato sulla barra del titolo e quindi aggiornare jwindow pos. per ogni mouseDragged da allora in poi. – dustins

+2

È possibile sapere dove si trova il puntatore quando la finestra inizia a spostarsi e quindi calcolare dove dovrebbe essere. Anche se non si ottiene effettivamente l'evento del mouse verso il basso se si utilizzano cornici non PL & F decorate. –

1

È possibile utilizzare un mouseMotionListener per verificare se il mouse è in movimento e, in caso affermativo, aggiornare la posizione della seconda finestra utilizzando getLocation(). È inoltre possibile verificare che la posizione corrente sia uguale alla posizione precedente per evitare sprechi di risorse. Non sono sicuro che getLocation() funzionerà correttamente, ma dipende da come il sistema operativo lo gestisce.

Problemi correlati