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
ii
lugar de soloi
? ¿Se adhiere a alguna convención o es una preferencia personal (o tal vez algo completamente diferente)?ii
lugar dei
. Cuando participo en concursos de programación, a menudo tengo que buscar el índice de bucle para, por ejemplo,+1
o-1
desde él para corregirlo por un error. En esos casos, buscarii
es mucho más fácil que buscari
, independientemente del editor que use. Del mismo modo, usojj
ykk
para 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