Ao fazer minha pré-pesquisa para essa pergunta , descobri que não há muitas informações bem organizadas sobre as melhores práticas do Java Swing disponíveis na Internet. Então, acho que vou dar uma chance ao Stack Exchange de construir essa lista excelente.
Quais são as melhores práticas de desenvolvimento do Java Swing? O que você encontrou para trabalhar para você e por quê?
Respostas:
Só posso responder pelo que funcionou para mim. Outros comentaristas apontaram que as GUIs do Java em geral se enquadram no 'vale misterioso' da aparência não muito nativa, e eu não discuto isso.
Faça bom uso da API de ação. Ele permite que você encapsule melhor as diferentes ações que seu usuário executará e permite conectá-las a atalhos, teclas aceleradoras, botões e outros objetos de entrada com muito mais facilidade.
Use um gerenciador de layout apropriado. O GridBagLayout é extremamente poderoso, mas eu diria que é impossível de manter, sem uma quantidade excessiva de comentários. Quando executo ferramentas de análise de código estático, como o Sonar, em um aplicativo GUI mais antigo que mantenho, ele sempre aponta grandes quantidades de números mágicos para tornar o layout do GridBags adequado. Eu tive muito sucesso com o GroupLayout, que evita precisar especificar o alinhamento perfeito de pixels.
Se você acha que precisa de um JDialog ... provavelmente não precisa . As caixas de diálogo são horríveis, em termos de experiência do usuário - esse aplicativo decidiu usá-las em todos os menus e formulários e aplicar regras sempre disponíveis de maneira bizarra. Isso se transformou em um pesadelo de manutenção quando, na verdade, precisamos alertar algo sobre o menu. Sugestão frustrada clicando em caixas de diálogo fora de foco - e, portanto, indissociáveis -.
Use o SwingWorker em vez de rolar seu próprio multithreading, onde apropriado. É muito fácil estender o SwingWorker e executar algumas tarefas demoradas, fornecendo atualizações regulares de volta à GUI. Pense em baixar uma atualização do cliente. Ele manipulará o agendamento de threads de trabalho para você e permitirá que você publique as porcentagens de download de volta à exibição, para que você possa atualizar sua ProgressBar ou o que você tem.
É tudo o que posso sugerir em minha experiência reconhecidamente limitada.
fonte
JDialog
está perfeitamente bem - desde que você o use para diálogos.JDialog
ou não).Eu diria que uma das primeiras coisas é não trabalhar diretamente nisso. O sistema de layout no Swing (IMHO) é terrível, e tentar fazer com que qualquer aplicativo substancial seja um pesadelo.
Dois dos muitos gerenciadores de layout alternativos que eu usei são o MigLayout e o MultiSplitPane. O MigLayout é de uso mais geral e cria qualquer layout em que você possa pensar de maneira fácil e sã. O MultiSplitPane é mais específico; Usei-o para fazer alguns layouts simples para GUI's que não tinham muita complexidade.
EDIT : Isso não substitui o balanço . Se você precisar usar o Swing, ainda poderá usar esses gerenciadores de layout, pois eles gerenciam apenas o swing, não substituí-lo.
Claro que a melhor alternativa é simplesmente não usar o Swing. O swing é muito criticado por ser horrível de se trabalhar, não parece nativo e lento. Existem muitas alternativas que aprenderam com o swing o que não fazer, como Qt, SWT e até o GTK. Estas são ótimas soluções de longo prazo para as dores de cabeça do Swing
EDIT : Como o Senhor Torgamus disse, eles não estão realmente disponíveis se você for forçado a usar o Swing. Se você usar essas opções da melhor maneira possível para resolver isso ao criar seu projeto, não a 3/4 do caminho ou ao escolher aplicativos herdados.
Também gostaria de observar que a maioria das GUIs alternativas usa bibliotecas nativas para se parecer com o sistema operacional e, em seguida, recorrer ao Swing ou a outra GUI Java pura.
fonte