Boa tarde a todos. Estou planejando a migração de um sistema em Delphi para Java Swing e gostaria de receber algumas dicas sobre as melhores práticas a adotar. Até já desenvolvi alguma coisa, mas não queria terminar todo o sistema sem ter certeza de estar usando todas as funcionalidades do Java. O sistema é com telas MDI para consulta (um grid para exibir os cadastros, campos para consulta e botões para incluir excluir e alterar) e telas modal para os cadastros, tem relatórios e conexão Firebird. Gostaria de manter essas funcionalidades. Quero usar herança nos formulários (faço todo o layout da tela na não). Sabem se há agum material que eu possa me basear?
Sistema Desktop com swing
14 Respostas
Ok, valeu pela dica. Porém o problema é com o uso dos gerenciadores de layout. Uso NullLayout, porque preciso que aparce o label a esquerda e o textfield a direita. Alguma sugestão?
Esse é o argumento mais estranho(para não dizer idiota) que já ouvi para justificar o uso do NullLayout.
Começe a aprender os LayoutManagers que vão te poupar MUITO trabalho no futuro.
Estude os basicos e o MigLayout, uma tela legal é organizada com varios Containers devidamente organizados por algum LayoutManager.
Uso NullLayout, porque preciso que aparce o label a esquerda e o textfield a direita.
Esse é o argumento mais estranho(para não dizer idiota) que já ouvi para justificar o uso do NullLayout.
Começe a aprender os LayoutManagers que vão te poupar MUITO trabalho no futuro.Estude os basicos e o MigLayout, uma tela legal é organizada com varios Containers devidamente organizados por algum LayoutManager.
Pode parecer (ou ser) idiota mesmo. Mas o caso é que não sei e tenho que aprender. Mesmo montando as telas ‘na não’ o uso do NullLayout não é recomendado? E as telas tem tamanho fixo, não serão redimensionadas.
Uso NullLayout, porque preciso que aparce o label a esquerda e o textfield a direita.
Esse é o argumento mais estranho(para não dizer idiota) que já ouvi para justificar o uso do NullLayout.
Começe a aprender os LayoutManagers que vão te poupar MUITO trabalho no futuro.Estude os basicos e o MigLayout, uma tela legal é organizada com varios Containers devidamente organizados por algum LayoutManager.
Pode parecer (ou ser) idiota mesmo. Mas o caso é que não sei e tenho que aprender. Mesmo montando as telas ‘na não’ o uso do NullLayout não é recomendado? E as telas tem tamanho fixo, não serão redimensionadas.
O ideal é usar algum layout pronto, existem layouts organizados que podem facilitar e muito o seu trabalho, o uso do NullLayout não é recomendado não.
Realmente, nunca é recomendado.
Fora que qualquer manutenção (e pode crer que haverá) nesse código, será o maior caos. Experiencia própria.
LayoutManagers dão um certo trabalho para aprender mas compensa muito para escrever telas na mão. E eu, assim como voce, gosto de criar as telas na mão.
So… MigLayout it!
Então o negócio e aprender mesmo! Algum exemplo?
Infelizmente as telas serão redimensionadas, mesmo que o tamanho delas seja fixo.
Lembre-se: O java é multi-plataforma. E essa é a grande motivação para usa-lo. Aí, basta que o usuário troque de SO, e fontes mudam de tamanho, as barras de título mudam de forma, etc. E não precisa ir muito longe, uma mudança de XP para Windows vista ou 7 já produz esse efeito. Como o tamanho da tela refere-se ao tamanho total, não a área útil, pode ser que todo layout quebre nessa brincadeira.
Sem falar que usuários tendem a gostar de redimensionar telas. Usar os layout managers, apesar de um pouco trabalhoso no início, dá esse benefício imediatamente, o que mais do que compensa o esforço. Com o null layout, para fazer uma tela redimensionável, você terá que usar de muita matemática. Simples, é verdade, mas extremamente trabalhosa. Os layoutmanagers fazem essa continha para você, sem nenhuma linha de código extra.
Mas como eu faço para resolver esse problema: a janela é criada com um tamanho padrão na minha classe base, porém que ao extender para outras classes os painéis tenham seu tamanho ajustado automaticamente, só que isso não ocorre:
Meu códigopublic class Layout extends JFrame {
public Layout() {
JPanel telaBusca = new JPanel();
telaBusca.setPreferredSize(new Dimension(200, 300));
telaBusca.setBackground(Color.YELLOW);
JPanel telaControle = new JPanel();
telaControle.setPreferredSize(new Dimension(600, 40));
telaControle.setBackground(Color.CYAN);
JPanel telaRegistro = new JPanel();
telaRegistro.setPreferredSize(new Dimension(400, 260));
telaRegistro.setBackground(Color.white);
getContentPane().add(telaControle, BorderLayout.SOUTH);
getContentPane().add(telaRegistro, BorderLayout.EAST);
getContentPane().add(telaBusca, BorderLayout.WEST);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Layout();
}
}
Ou seja, gostaria que os JPanels ficassem ancorados às bordas.


Ok, resolvido. Valeu!
Tambem aconselho usar o SpringLayout. Eu quem não costumo usar Swing achei bem facil.