¿Cuál es la forma más sencilla de centrar a java.awt.Window
, como a JFrame
o a JDialog
?
java
swing
user-interface
awt
Andrew Swan
fuente
fuente
setLocation()
,setLocationRelativeTo()
ysetLocationByPlatform()
todos o AWT, no swing. ;)Respuestas:
De este enlace
fuente
pack()
y puso la esquina superior izquierda del marco en el centro de mi pantalla. Después de mover la línea hacia abajopack()
, se centró correctamente.Esto debería funcionar en todas las versiones de Java
fuente
setLocationRelativeTo(null)
debe llamarse después de usarsetSize(x,y)
o usarpack()
.fuente
Tenga en cuenta que las técnicas setLocationRelativeTo (null) y Tookit.getDefaultToolkit (). GetScreenSize () funcionan solo para el monitor principal. Si se encuentra en un entorno de varios monitores, es posible que deba obtener información sobre el monitor específico en el que se encuentra la ventana antes de realizar este tipo de cálculo.
A veces importante, a veces no ...
Consulte los javadocs GraphicsEnvironment para obtener más información sobre cómo obtener esto.
fuente
En Linux el código
Coloque mi ventana en una ubicación aleatoria cada vez que la inicie, en un entorno de múltiples pantallas. Y el codigo
"Cortar" la ventana por la mitad colocándola en el centro exacto, que está entre mis dos pantallas. Usé el siguiente método para centrarlo:
Hace que la ventana aparezca justo en el centro de la primera pantalla. Probablemente esta no sea la solución más sencilla.
Funciona correctamente en Linux, Windows y Mac.
fuente
Finalmente conseguí que este montón de códigos funcionara en NetBeans usando Swing GUI Forms para centrar el jFrame principal:
O
O
fuente
Lo siguiente no funciona para JDK 1.7.0.07:
Coloca la esquina superior izquierda en el centro, no lo mismo que centrar la ventana. El otro tampoco funciona, involucrando frame.getSize () y dimension.getSize ():
El método getSize () se hereda de la clase Component y, por lo tanto, frame.getSize también devuelve el tamaño de la ventana. Por lo tanto, restando la mitad de las dimensiones vertical y horizontal de las dimensiones vertical y horizontal, para encontrar las coordenadas x, y de dónde colocar la esquina superior izquierda, obtiene la ubicación del punto central, que termina centrando la ventana también. Sin embargo, la primera línea del código anterior es útil, "Dimensión ...". Solo haz esto para centrarlo:
JLabel establece el tamaño de la pantalla. Está en FrameDemo.java disponible en los tutoriales de Java en el sitio de Oracle / Sun. Lo configuré a la mitad del alto / ancho del tamaño de la pantalla. Luego, lo centré colocando la parte superior izquierda en 1/4 de la dimensión del tamaño de la pantalla desde la izquierda, y 1/4 de la dimensión del tamaño de la pantalla desde la parte superior. Puede utilizar un concepto similar.
fuente
a continuación se muestra el código para mostrar un marco en la parte superior central de la ventana existente.
}
} public static void main (String [] args) arroja Exception {
}
A continuación se muestra el resultado del fragmento de código anterior:
fuente
frame.setLocation(x, 0);
parece estar mal, ¿no debería serframe.setLocation(x, y);
en su lugar?int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
, ¿ existe en el código solo para mostrar que también puede centrarse en el eje vertical? Ok, pensé que te habías olvidado de usarlo, perdón por los problemas.Hay algo realmente simple que podrías estar pasando por alto después de intentar centrar la ventana usando
setLocationRelativeTo(null)
osetLocation(x,y)
y termina estando un poco descentrado.Asegúrese de usar cualquiera de estos métodos después de llamar
pack()
porque terminará usando las dimensiones de la ventana para calcular dónde colocarla en la pantalla. Hasta quepack()
se llame, las dimensiones no son lo que pensaría, por lo tanto, descarta los cálculos para centrar la ventana. Espero que esto ayude.fuente
Ejemplo: Dentro de myWindow () en la línea 3 está el código que necesita para configurar la ventana en el centro de la pantalla.
fuente
frame.setLocationRelativeTo (nulo);
Ejemplo completo:
fuente
El siguiente código centra el
Window
en el centro del monitor actual (es decir, donde se encuentra el puntero del mouse).fuente
También puedes probar esto.
fuente
En realidad, el marco
.getHeight()
ygetwidth()
no devuelve valores, verifíquelo colocandoSystem.out.println(frame.getHeight());
directamente los valores de ancho y alto, luego funcionará bien en el centro. por ejemplo: como a continuaciónambos 450 es mi marco ancho y alto
fuente
fuente
El orden de las llamadas es importante:
primero -
segundo -
fuente