SWING - initComponents() + SWING

16 respostas
L

Boa tarde amigos,

Desculpe se farei uma pergunta besta, mas esbarrei em um problema e não estou conseguindo resolver.
Fiz um sistema utilizando a interface gráfica do netbeans.

O programa estava funcionando bem, quando esbarrei na seguinte questão: Tenho que criar um campo via código, pois irá depender de algumas informações do banco.

Então fiz o seguinte, apenas como teste para incluir um botão:

initComponents();

        this.setSize(200,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton b = new JButton();

        b.setSize(20,50);
        
        panel.add(b);
        this.add(panel);

Quando eu comento a linha do “initComponents();” funciona, porém quando ela não esta comentada, o panel e o botão criado não aparecem. Como isso é feito? Como se inclui componentes via código depois do InitComponents()?

Agradeço desde já

16 Respostas

M

é só dar um

L

Valew…mas não deu certo…

M

da um “setVisible(true)” no button também!

L

Poxa…também não deu certo…veja se estou fazendo algo errado!

initComponents();

        this.setSize(200,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton b = new JButton();
        b.setSize(20,50);
        
        panel.add(b);
        this.add(panel);
        b.setVisible(true);
        panel.setVisible(true);
M

cara desculpe eu nao havia testado o código antes… pega esse aqui… testei e deu certo… só faltou tu setar o tamanho do panel…

initComponents();
        this.setSize(200, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton b = new JButton();
        panel.setSize(200,200);
        b.setSize(20, 50);
        panel.add(b);
        this.add(panel);
L

Cara…valew mesmo!
Não acredito q era só isso!

Olha só …sem querer abusar da sua boa vontade, mas…
Por que não consigo mudar a posição o botão que criei?

Tem algo mais q deve ser feito?

tentei colocar setLocation(30, 180); mas não deu certo

S

tenta o método setBounds();

M
faz assim ó...
getContentPane().setLayout(null);
        initComponents();

        this.setSize(200, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        JButton b = new JButton();
        panel.setLocation(10, 100);
        b.setLocation(10, 100);
        panel.setSize(200, 200);
        b.setSize(20, 150);
        b.setText("Botao");
        panel.add(b);
        this.add(panel);

voce deve primeiro setar o layout como null e depois setar a posicao do panel pois os seu botao está dentro do panel senao fizer isso o seu botao nao irá para a posição que quer

L

Quase lá pessoal…com a resposta acima, o panel até mudou a localização, porém, continuo sem conseguir mover o jbutton.

Segue o código.

getContentPane().setLayout(null);
        initComponents();
        
        this.setSize(200,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLocation(10,100);
        panel.setSize(200,200);
        panel.setVisible(true);

        JButton b = new JButton();
        b.setText("teste");
        b.setSize(20,50);
        b.setVisible(true);
        
        
        panel.add(b);
        this.add(panel);
D

Vc não consegue mover seu botão pois o layout do painel não é null.
O ideal é utilizar algum gerenciador de layout para organizar sua interface gráfica, mas se você quer mesmo ter controle total sobre a posição, vc então continua a usar o layout null.
O que você deve fazer é:

[]'s

L

Entendi David,

Fiz da forma que falou, troquei alterei para o panel.setLayout(null) e deu certo.

Desta forma vou conseguir fazer exatamente o que quero, mesmo assim, você acha que eu devo utilizar um Manager?

Desde já, agradeço pela ajuda de todos!

D

Então Lucas, o ideal é usar, pois o gerenciador vai cuidar do redimensionamento dos componentes para você caso seja necessário, entretanto, em situações onde você tem interfaces muito complexas, fica difícil usar um gerenciador, pois normalmente eles mais atrapalham do que ajudam. Em um projeto que implementei ano passado, o cliente queria uma interface beeeem complexa, repleta de tabelas, botões, abas, campos de diversos tipos e tamanhos, então tive que apelar para o layout nulo. Existem também outros gerenciadores de layout que são disponibilizados em bibliotecas a parte como o MigLayout.

[]'s

D

Falando em layout, tem uma piadinha muito legal.
http://madbean.com/anim/totallygridbag/

[]'s

L

Cara…muito obrigado pelas dicas, realmente vou pensar no que será o melhor no meu caso!
Mais uma vez obrigado, quanto a piada, excelente cara!

Caso resolvido!

P

Senhores,

Aproveitando a Thread. Sobre o uso do setBounds.

No caso das interface gráficas bem complexas, como o nosso amigo davidbuzatto comentou…

Não há problemas quanto a resolução em diferentes monitores ? Sei que o mais correto é usar os gerenciadores de layout,
mas as vezes eles me enchem a paciência !

D

Oi Pedro,

Tem problema sim, pois como não há um gerenciador para organizar os componentes, estes ficarão fora da tela.
Para resolver isso, você pode usar JPanel dentro de um JScrollPane e então colocar seus componentes no painel.

[]'s

Criado 11 de novembro de 2011
Ultima resposta 12 de nov. de 2011
Respostas 16
Participantes 5