Java: JFrame.setLocationRelativeTo(null) no centra la ventana en Ubuntu 10.04/gnome 2.30.2 con OpenJDK 1.6.0_18
(6)
Una forma es posicionar manualmente la ventana. Coloque el siguiente código justo después de su llamada al pack()
.
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Point middle = new Point(screenSize.width / 2, screenSize.height / 2);
Point newLocation = new Point(middle.x - (jFrame.getWidth() / 2),
middle.y - (jFrame.getHeight() / 2));
jFrame.setLocation(newLocation);
Descargo de responsabilidad, esto solo fue probado en Windows.
Además, siempre debe usar setPreferredSize()
lugar de setSize()
.
Código de muestra:
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
// jFrame.setLocationRelativeTo(null); // same results
jFrame.setVisible(true);
captura de pantalla http://img193.imageshack.us/img193/5296/screenshotrev.png
¿Es esto culpa de OpenJDK? Recuerdo haber oído que no era tan bueno como el de Sun, pero desde que se convirtió en el estándar para Ubuntu o lo que sea, decidí aceptarlo. Probablemente el programa se ejecutará en Windows, así que supongo que tendré que comprobarlo ... ¿Hay alguna manera fácil de arreglar esto de una manera independiente de la plataforma sin romperlo donde ya funciona?
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null); //To center the code
Esto corregirá el problema y centrará el Jframe
jFrame.validate();
En realidad, esto funciona mejor ya que el paquete puede cambiar el tamaño del marco, mientras que validate
deja solo el tamaño del marco.
Sé que esta es una vieja pregunta, pero setLocationRelativeTo () funcionará, pero debe llamarse después de pack (). Frame getWidth () y getHeight () devuelven valores diferentes (correctos) después del empaque y es por eso que OP no puede centrarse.
Solo una precisión: si configura la ubicación antes del tamaño del marco, centrará la esquina superior izquierda de la ventana porque el tamaño es (0,0). Tienes que establecer el tamaño antes de la ubicación.
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
Funciona bien conmigo con OpenJDK-6 y Ubuntu 13.04. Pruébalo en otras plataformas.
No debe declarar el tamaño jFrame antes de indicar la ubicación relativa. Si lo hace, lo que sucede es que sacará su iFrame de la ubicación determinada.
Esto está mal----
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setVisible(true);
Esto es correcto----
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//size comes first
jFrame.setSize(600, 600);
//and then the position
jFrame.setLocationRelativeTo(null);
jFrame.pack();
jFrame.setVisible(true);