En otro hilo, dije que me gustaba centrar mis GUI haciendo algo como esto:
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new HexagonGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Pero Andrew Thompson tenía una opinión diferente, en lugar de llamar
frame.pack();
frame.setLocationByPlatform(true);
y las mentes inquisitivas quieren saber por qué?
java
swing
user-interface
Aerodeslizador lleno de anguilas
fuente
fuente

Respuestas:
En mi opinión, una GUI en el medio de la pantalla se ve tan ... "splash-screen'ish". ¡Sigo esperando que desaparezcan y que aparezca la GUI real !
Desde Java 1.5 hemos tenido acceso a
Window.setLocationByPlatform(boolean). cual..Eche un vistazo al efecto de este ejemplo que coloca 3 GUI en las posiciones predeterminadas elegidas por el sistema operativo: en Windows 7, Linux con Gnome y Mac OS X.
(3 lotes de) 3 GUI perfectamente apiladas. Esto representa 'la ruta de menor sorpresa' para el usuario final, ya que es cómo el sistema operativo podría colocar 3 instancias del editor de texto plano predeterminado (o cualquier otra cosa, para el caso). Mi agradecimiento a trashgod para Linux y Mac. imágenes
Aquí está el código simple utilizado:
fuente
iilugar de soloi? ¿Se adhiere a alguna convención o es una preferencia personal (o tal vez algo completamente diferente)?iilugar dei. Cuando participo en concursos de programación, a menudo tengo que buscar el índice de bucle para, por ejemplo,+1o-1desde él para corregirlo por un error. En esos casos, buscariies mucho más fácil que buscari, independientemente del editor que use. Del mismo modo, usojjykkpara los índices de bucle anidados. :)Estoy totalmente de acuerdo en que
setLocationByPlatform(true)es la mejor manera de especificar la posición de un nuevo JFrame, pero en una configuración de monitor doble puede tener problemas. En mi caso, el JFrame secundario aparece en el "otro" monitor. Ejemplo: tengo mi GUI principal en la pantalla 2, inicio un nuevo JFrame consetLocationByPlatform(true)y se abre en la pantalla 1. Así que aquí hay una solución más completa, creo:fuente