2010-03-23 6 views
6

Estoy escribiendo una aplicación Java con marcos móviles, y me encontré con un capricho en Linux. Estoy ejecutando GNOME 2.16.0 en CentOS.¿Cómo muevo un Java JFrame parcialmente fuera de mi escritorio de Linux?

Cuando uso JFrame.setBounds para establecer los límites a cualquier ubicación que esté medio fuera de la pantalla, realmente establece la ubicación del marco lo más cerca posible de los límites especificados mientras permanece completamente en la pantalla.

¿Cómo le digo a Java que le diga a GNOME que ponga realmente el marco donde especifico, incluso si está medio fuera de la pantalla?

Aquí hay un código de muestra que demuestra el problema, suponiendo que -50, 50 está fuera de la pantalla. El marco aún se puede arrastrar fuera de la pantalla por la barra de título, pero las llamadas a setLocation o setBounds no funcionan.

Esto funciona bien en Windows.

 
JFrame frame = new JFrame(); 
frame.setPreferredSize(new Dimension(200, 200)); 
frame.pack(); 
frame.setVisible(true); 
frame.setLocation(-50, 50); 
+0

Ahh alegrías de la interfaz de usuario Java no se comporta lo mismo en todas las plataformas ... Diría que la respuesta probablemente no está de parte de Java, pero puedo estar equivocado (de ahí el comentario en lugar de responder) :) – Romain

Respuesta

3

No creo que sea posible en Java, pero me gustaría que se demostrara que está mal. Lo veo como una característica, pensada para reducir el riesgo de pérdida de ventanas. Algo similar ocurre en Mac OS X y Ubuntu. Aquí hay una primitiva example para retocar. Tal vez alguien pueda probar en Windows.

+0

Funciona bien en Windows XP usando JDK6. Usé setLocation (-50, 0) y parte de la barra de título estaba fuera de la pantalla. – camickr

+0

Gracias por mirar esto, camickr. Como sugiere Romain Muller, esto puede depender de la implementación. – trashgod

+0

Es extraño que pueda arrastrar el cuadro a la mitad de la pantalla, pero no puedo usar setBounds para ponerlo allí. Todavía estoy buscando una solución a esto. Mientras tanto, creo que verificará si la propiedad del sistema java.awt.graphicsenv está configurada en sun.awt.Win32GraphicsEnvironment, ya que es la única en la que parece que puedes establecer un fotograma fuera de la pantalla. Si no es así, entonces puedo ajustar mi lógica para ni siquiera tratar de mover un marco fuera de la pantalla. –

Cuestiones relacionadas