2011-09-20 22 views
6

Estoy agregando un montón de JInternalFrame s en un JDesktopPane, como el usuario selecciona para abrir varias características a través de los menús. Pero me gustaría que los marcos internos se abran centrados en el panel de escritorio, en lugar de en la esquina superior izquierda, donde parecen predeterminados.¿Cómo abro un JInternalFrame centrado en un JDesktopPane?

¿Cómo puedo especificar que los JInternalFrames se abren centrados o los muevo hacia el centro después de abrirlos?

jDesktopPane.add(jInternalFrame); // jInternalFrame is not centered! 
+1

debe obtener la anchura y altura de la pantalla, y hacer algunos cálculos para establecer la X e y para el JInternalFrame. No he hecho eso en años, así que no puedo darte los métodos completos. Lo siento – santiagobasulto

Respuesta

11

Como referencia, aquí está la solución he utilizado, basado en los consejos de las adelfas:

Dimension desktopSize = desktopPane.getSize(); 
Dimension jInternalFrameSize = jInternalFrame.getSize(); 
jInternalFrame.setLocation((desktopSize.width - jInternalFrameSize.width)/2, 
    (desktopSize.height- jInternalFrameSize.height)/2); 
4

Calcular la esquina superior izquierda de la nueva ubicación (basado en el tamaño de la JDesktopPane y JInternalFrame) y luego llamar JInternalFrame.setLocation.

0

Sugeriría el método Window.setLocationRelativeTo (Component), que centrará la ventana en relación con un componente especificado. En lugar de pasar en un JDesktopPane, es posible que desee obtener el marco primario para un componente, ya que de lo contrario, se centrará su JInternalFrame de acuerdo con lo que el componente se pasa en

Aquí es un ejemplo de código:.

private void showDialog(Dialog dialogToCenter, Component button) { 
    Frame frame = JOptionPane.getFrameForComponent(button); 
    dialogToCenter.setLocationRelativeTo(frame); 
    dialogToCenter.setVisible(true); 
} 
+2

Creo que setLocationRelativeTo solo está disponible para Windows, no JInternalFrames (que no heredan de Window). Tal vez me falta algo, pero ¿puedes usar este método con un JInternalFrame en lugar de un JDialog? – Steven

+0

Lo siento, estás en lo correcto, creí erróneamente que JInternalFrame se extendía desde Window. – piepera

Cuestiones relacionadas