¿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.

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?


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);

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


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í


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.


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'.


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.


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.


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);


1

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

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.