В другом потоке я заявил, что мне нравится центрировать свои графические интерфейсы, делая что-то вроде этого:
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new HexagonGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Но Эндрю Томпсон придерживался другого мнения и вместо этого назвал
frame.pack();
frame.setLocationByPlatform(true);
и пытливые умы хотят знать, почему?
java
swing
user-interface
Судно на воздушной подушке, полное угрей
источник
источник
Ответы:
На мой взгляд, графический интерфейс в центре экрана выглядит таким ... "splash-screen'ish". Я все жду, когда они исчезнут и появится настоящий графический интерфейс!
Начиная с Java 1.5 у нас был доступ к
Window.setLocationByPlatform(boolean)
. который..Посмотрите на эффект этого примера, который помещает 3 графических интерфейса пользователя в позиции по умолчанию, выбранные ОС - в Windows 7, Linux с Gnome и Mac OS X.
(3 партии) 3 аккуратно сложенных графических интерфейса. Это представляет собой «путь наименьшего удивления» для конечного пользователя, поскольку именно так ОС может размещать 3 экземпляра стандартного текстового редактора (или чего-либо еще, если на то пошло). Спасибо trashgod за Linux и Mac. изображений.
Вот используемый простой код:
источник
ii
а не простоi
? Придерживается ли это какой-то условности или это личное предпочтение (или, может быть, что-то совершенно иное)?ii
вместоi
. Когда я участвую в соревнованиях по программированию, мне часто приходится искать индекс цикла, скажем,+1
или-1
от него, чтобы исправить одну ошибку. В таких случаях искатьii
намного проще, чем искатьi
, независимо от того, какой редактор я использовал. Точно так же я используюjj
иkk
для индексов вложенного цикла. :)Я полностью согласен, что
setLocationByPlatform(true)
это лучший способ указать новую позицию JFrame, но при настройке с двумя мониторами вы можете столкнуться с проблемами. В моем случае дочерний JFrame создается на «другом» мониторе. Пример: у меня есть основной графический интерфейс на экране 2, я запускаю новый JFrame с помощью,setLocationByPlatform(true)
и он открывается на экране 1. Итак, я думаю, вот более полное решение:источник