Em outro tópico , afirmei que gostava de centralizar minhas GUIs fazendo algo assim:
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new HexagonGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Mas Andrew Thompson tinha uma opinião diferente, para chamar
frame.pack();
frame.setLocationByPlatform(true);
e mentes curiosas querem saber por quê?
java
swing
user-interface
Hovercraft cheio de enguias
fonte
fonte
Respostas:
A meu ver, uma GUI no meio da tela parece tão .. "splash-screen'ish". Eu continuo esperando eles desaparecerem e o verdadeiro GUI apareça!
Desde o Java 1.5, tivemos acesso
Window.setLocationByPlatform(boolean)
. qual..Veja o efeito deste exemplo que coloca 3 GUIs nas posições padrão, conforme escolhido pelo sistema operacional - no Windows 7, Linux com Gnome e Mac OS X.
(3 lotes) 3 GUIs ordenadamente empilhadas. Isso representa 'o caminho da menor surpresa' para o usuário final, pois é assim que o sistema operacional pode posicionar três instâncias do editor de texto sem formatação padrão (ou qualquer outra coisa, nesse caso). Meus agradecimentos ao trashgod pelo Linux e Mac. imagens.
Aqui está o código simples usado:
fonte
ii
e não apenasi
? Isso segue alguma convenção ou é uma preferência pessoal (ou talvez algo completamente diferente)?ii
vez dei
. Quando participo de competições de programação, muitas vezes tenho que procurar o índice do loop para, digamos,+1
ou a-1
partir dele, corrigir um erro. Nesses casos, pesquisarii
é muito mais fácil do que pesquisari
, independentemente de qual editor eu usei. Da mesma forma, eu usojj
ekk
para os índices de loop aninhados. :)Concordo totalmente que
setLocationByPlatform(true)
é a melhor maneira de especificar a posição de um novo JFrame, mas em uma configuração de monitor duplo, você pode entrar em problemas. No meu caso, o filho JFrame é gerado no monitor 'outro'. Exemplo: Eu tenho minha GUI principal na Tela 2, inicio um novo JFramesetLocationByPlatform(true)
e ele abre na Tela 1. Portanto, aqui está uma solução mais completa, eu acho:fonte