Dans un autre fil, j'ai déclaré que j'aimais centrer mes interfaces graphiques en faisant quelque chose comme ceci:
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new HexagonGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Mais Andrew Thompson avait une opinion différente, appeler à la place
frame.pack();
frame.setLocationByPlatform(true);
et les esprits curieux veulent savoir pourquoi?
java
swing
user-interface
Aéroglisseur plein d'anguilles
la source
la source
Réponses:
À mes yeux, une interface graphique au milieu de l'écran semble tellement .. "splash-screen'ish". J'attends qu'ils disparaissent et que la véritable interface graphique apparaisse!
Depuis Java 1.5, nous avons accès à
Window.setLocationByPlatform(boolean)
. lequel..Jetez un œil à l'effet de cet exemple qui met 3 interfaces graphiques dans les positions par défaut choisies par le système d'exploitation - sur Windows 7, Linux avec Gnome et Mac OS X.
(3 lots de) 3 interfaces graphiques parfaitement empilées. Cela représente «le chemin de la moindre surprise» pour l'utilisateur final, car c'est ainsi que le système d'exploitation peut positionner 3 instances de l'éditeur de texte brut par défaut (ou quoi que ce soit d'autre, d'ailleurs). Mes remerciements à trashgod pour Linux et Mac. images.
Voici le code simple utilisé:
la source
ii
plutôt que justei
? Est-ce que cela adhère à une convention ou est-ce une préférence personnelle (ou peut-être quelque chose de complètement différent)?ii
place dei
. Lorsque je participe à des concours de programmation, je dois souvent rechercher l'index de boucle vers, par exemple,+1
ou à-1
partir de celui-ci pour corriger une erreur. Dans ces cas, la rechercheii
est beaucoup plus facile que la recherchei
, quel que soit l'éditeur que j'ai utilisé. De même, j'utilisejj
etkk
pour les index de boucle imbriqués. :)Je suis tout à fait d'accord que
setLocationByPlatform(true)
c'est la meilleure façon de spécifier la position d'un nouveau JFrame, mais sur une configuration à deux moniteurs, vous pouvez avoir des problèmes. Dans mon cas, l'enfant JFrame est engendré sur «l'autre» moniteur. Exemple: j'ai ma GUI principale sur l'écran 2, je démarre un nouveau JFrame avecsetLocationByPlatform(true)
et il s'ouvre sur l'écran 1. Voici donc une solution plus complète, je pense:la source