2009-04-16 21 views
5

Estoy tratando de implementar una característica similar a un cajón OS X en Java, por lo que voy a tener una ventana oculta debajo de otra. Sin embargo, cuando arrastro la ventana principal (JFrame) necesito enviar actualizaciones a medida que se mueve a la ventana secundaria (JWindow) a continuación.Eventos para arrastrar ventanas en Java

así que sería algo como esto ...

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

Dicho esto, ComponentListener en OS X no envía actualizaciones constantes para componentMoved, sólo cuando hace una pausa por un segundo o levantar el pie del ratón. Esto parece diferir de Win/Linux, por lo que me preguntaba si alguien tenía una solución diferente.

Sin entender completamente todo, esperaba obtener y tratar con lo que sea que esté dibujando la barra de título de la ventana (algo sobre el rootpane parece). Ni siquiera estoy seguro de si eso será posible, pero es la única solución que se me ocurre para determinar cuándo se arrastra toda la ventana.

¡Se agradece cualquier ayuda!

+0

Debería haber especificado, estoy usando un JFrame como primario y planeo usar una JWindow para el secundario. – dustins

Respuesta

1

Suponiendo que tiene código de confianza, puede usar MouseInfo.getPointerInfo() para obtener la ubicación del puntero. Esta información se puede sondear para que pueda determinar dónde debería estar la ventana. Es posible que solo pueda sondear dónde está la ventana de todos modos.

+0

No estoy seguro de cómo sería útil. La posición del cursor no parece ayudar a saber cuándo se está moviendo el JFrame principal, ¿verdad? Estaba esperando que se pueda saber cuándo mouseDown se activa en la barra de título y luego actualiza jwindow pos. para cada mouseDragged a partir de entonces. – dustins

+2

Puede averiguar dónde está el puntero cuando la ventana comienza a moverse, y luego averiguar dónde debería estar desde allí. Aunque no obtendrá el evento del mouse si está utilizando marcos decorados que no sean PL & F. –

1

Podría usar mouseMotionListener para ver si el mouse se está moviendo, y si lo está, actualice la posición de la segunda ventana usando getLocation(). También puede verificar que la posición actual sea igual a la posición anterior para evitar el desperdicio de recursos. No estoy seguro de si getLocation() funcionará correctamente, realmente depende de cómo lo maneje el sistema operativo.

Cuestiones relacionadas