¿Cómo configurar JFrame para que parezca centrado, independientemente de la resolución del monitor? [cerrado]

197

Mientras trabajo con Java, me resulta difícil colocar mi ventana principal en el centro de la pantalla cuando inicio la aplicación.

¿Hay alguna manera de que pueda hacer eso? No tiene que estar centrado verticalmente, la alineación horizontal es el objetivo más importante para mí. Pero la alineación vertical también es bienvenida.

AmateurProgramador
fuente

Respuestas:

232

Siempre lo hice de esta manera:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);

¿Dónde thisestá involucrado el JFrame?

Jack
fuente
1
Sé que esta respuesta es muy antigua, pero ¿hay alguna forma posible de hacer esto en un contexto estático? Estoy decidiendo entre trabajar para eso o simplemente abandonar el main vacío público estático (String [] args) que por cualquier razón quería usar.
2xedo
14
Esto funcionará en una configuración de monitor único, pero con los monitores duales puede aparecer a caballo entre los dos (suponiendo que tengan la misma resolución). El uso setLocationRelativeTo(null)lo centrará en el monitor primario incluso en una configuración de monitores múltiples.
Rangi Keen
1
Tenga en cuenta que debe configurar el JFrame visible ANTES de centrarlo.
Hunter S
44
@HunterS: esto es incorrecto. De hecho, se recomienda no configurarlo visible hasta DESPUÉS de centrarlo. De esta manera no aparecerá y luego saltará. Siempre que haya empaquetado el marco o establecido las dimensiones antes del código en esta respuesta, estará bien.
Erick Robertson
520

Utilizar setLocationRelativeTo(null)

Este método tiene un efecto especial cuando lo pasa a null. De acuerdo con el Javadoc:

Si el componente es nulo o la configuración de gráficos asociada con este componente es nula, la ventana se coloca en el centro de la pantalla.

Esto debe hacerse después de configurar el tamaño o llamar pack(), pero antes de configurarlo visible, así:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JRL
fuente
102
+1 si se usa el método pack (), setLocationRelativeTodebe usarse después de la llamada al método pack ()
Ravindra Gullapalli
66
@ Imray porque probablemente no funciona con la configuración de monitor dual. : P
Ankit
17
Parece que ese método debería llamarse después .setSize().
Kamil
66
Esto funciona en una configuración de monitores múltiples y, como se indica en los comentarios, debe llamarse después de pack () y setSize () si se los llama.
Paul Gregoire
2
@Ankit funciona perfectamente con la configuración de mi monitor dual. La "mejor" respuesta siempre es elegida por el OP.
Kent
59

Puede llamar JFrame.setLocationRelativeTo(null)para centrar la ventana. Asegúrate de poner esto antesJFrame.setVisible(true)

Greg
fuente
20
+1 si se usa el método pack (), setLocationRelativeTodebe usarse después de la llamada al método pack ()
Ravindra Gullapalli
29

Simplemente haga clic en el formulario y vaya a las propiedades de JFrame, luego a la pestaña Código y verifique Generate Center.

ingrese la descripción de la imagen aquí

علاء علام
fuente
Nunca pensé acerca de esto. De todos modos, ¿qué tal el código que funciona detrás de sí mismo después de hacer clic en esto ...? @HenkVanBoeijen
gumuruh
11

Tan simple como esto ...

setSize(220, 400);
setLocationRelativeTo(null);  

o si está utilizando un marco, establezca el marco en

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  

Para aclarar, de los documentos :

Si el componente es nulo o la configuración de gráficos asociada con este componente es nula, la ventana se coloca en el centro de la pantalla.

Vogel612
fuente
7

Estoy usando NetBeans IDE 7.2.1 como mi entorno de desarrollador y allí tiene una opción para configurar las propiedades de JForm.

en las Propiedades de JForm, vaya a la pestaña 'Código' y configure el 'Centro de generación'. primero deberá establecer la Política de tamaño de formulario en 'Generar código de cambio de tamaño'.

Asaf Magen
fuente
6

Estoy usando NetBeans IDE 7.3 y así es como hago para centralizar mi JFrame. Asegúrese de hacer clic en el Panel JFrame e ir a la barra de propiedades de JFrame, hacer clic en la barra de Código y seleccionar la casilla de verificación Generar centro.

Gstuntz
fuente
2

Si usa NetBeans, simplemente haga clic en el marco en la vista de diseño, luego en la pestaña de código en sus propiedades. A continuación, marque 'Generar centro'. Eso hará el trabajo.

Kingsley Ijike
fuente
1

Si explícitamente, setPreferredSize(new Dimension(X, Y));entonces es mejor usar:

setLocation(dim.width/2-this.getPreferredSize().width/2, dim.height/2-this.getPreferredSize().height/2);


fuente
1

Puede usar este método, que permite que JFrame esté centrado y en pantalla completa al mismo tiempo.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
El Appsolit
fuente
0

En Net Beans GUI: vaya a las propiedades jframe ( haga clic con el botón derecho en jFrame en Navigator), debajo del código , propiedad de política de tamaño de formulario , seleccione Generar cambio de tamaño de código . En la misma ventana, desactive Generar posición y marque Generar tamaño y centro .

Disfruta la programación. Ramana

KV Ramana
fuente