Swing - Diferença do que se vê no design em relação ao que se executa

Pessoal, sou novo no fórum e estou com uma dúvida básica aqui.
Estou aprendendo Swing e usando a paleta no netbeans para a criação da tela.
Deixo tudo bonito na tela e quando executo fica tudo bagunçado… alguém sabe o que pode ser?
Já mexi em layout escolhendo outros tipos e nada resolveu.

Obrigado.

É muito complicado você se basear pelo preview de qualquer IDE, dificilmente elas dão uma visão real da situação.
Este problema sempre ocorreu e vai ocorrer sempre que você mudar de plataforma (desenvolve em windows e roda em linux, vice versa, etc) ou de resolução de tela (desenvolve para 1024x768 e roda em 1366x769), sem ter tratamento para estas diferenças.
Por isso eu sugiro que você teste o eclipse e o plugin windowbuilder. Ele, além do código mais limpo, gera um produto final muito próximo do preview (não será o mesmo em todos os casos, ok?).
Aliás, é quase unânime que o editor drag and drop do netbeans é muito ruim.

Outra coisa, a maioria dos desenvolvedores swing que conheci (uns 4 ou 5) não usam drag and drop, fazem tudo na mão (eu prefiro fazer tudo na mão quando é web).

1 curtida

Pois é… sempre desenvolvi com JSF e tudo na mão, nunca tive problemas. Aplicações desktop sempre fiz em Delphi e mesmo sendo drag and drop nunca tive problema. Agora que peguei Swing pra aprender já me deparo com isso… Muito ruim dessa forma!

Tem uma diferença bem grande entre java e delphi e que talvez justifique esse abismo: o java roda sobre uma virtual machine.

Sim, com toda a certeza. Só quis dizer que já trabalhei com drag and drop sem ter problemas e levei um susto no java usando Swing.

Resolvi!
Ao invés de criar o JFrame usando o “assistente”, criei ele na mão.
Em seguida criei o meu Panel usando o assistente e construí ele todo com uso da paleta
Após isso, incluí o Panel no JFrame via código. Ficou tudo certinho agora e acredito que tenha sido algum código gerado automaticamente que fazia o JFrame ficar todo bagunçado.

segue:
JFrame janela = new JFrame(“Agenda - Cadastro”);
janela.setSize(660, 200);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Painel meuPainel = new Painel();
janela.add(meuPainel);
janela.setVisible(true);

Então, neste ponto, o windowbuilder do eclipse é muito superior por conta disso. O código gerado é muito melhor.

1 curtida

Obrigado Luis! Abraços

de uma lista neste post aqui mesmo do guj e vai entender exatamente o porque acontece isso:

http://www.guj.com.br/t/como-alterar-o-look-and-feel-no-netbeans/233790

Quando faço aplicações com GUI desktop, costumo utilizar o Look And Feel do sistema operacional, até para que o usuário final esteja mais acostumado com o “jeitão” das telas:

Geralmente no método main, antes de instanciar qualquer janela ou classe visual, eu faço o seguinte:

try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Throwable t) {
    t.printStackTrace();
}