Adicionar uma classe dentro de JPanel de outra

5 respostas
C

Estou eu aqui novamente com mais um probleminha…

Pessoal, tenho uma classe que extends JFrame e está funcionando legal. Tenho outra classe que é um chat que também já está funcionando e essa classe extends JPanel. O que preciso é chamar esse chat dentro da primeira classe que citei. Na verdade eu já fiz isso e consegui colocar, no entanto, eu não consigo redimensionar o chat dentro do panel que criei. O trecho do código que utilizei para chamar o chat foi:

JPanel panelChat = new JPanel();//Cria  o JPanel que conterá o chat
panelChat.setSize(100, 100); //tamanho do JPanel que conterá o chat
panelChat.setBounds(803, 382, 205, 279); //Localização do JPanel que conterá o chat
getContentPane().add(panelChat); //Adicionando o JPanel ao Container principal da classe
panelChat.add(new ChatCliente());//Invocando instância do chat.

Como eu disse, aparece um JTextField onde deveria estar o chat e antes de eu ficar tentando redimensionar, aparecia o botão de enviar e eu consegui enviar mensagens normalmente.

Obrigado!

5 Respostas

U

cassioliveira

vc ter que setar o Jframe como .setLayout(null);

U

o seu problema é quando vc add um JPanel a um Jframe, ou um Jpanel dentro de outro Jpanel?

C

Quando começei a trabalhar com Swing, tive bastante dor de cabeça até descobrir que podia deixar o layout como null. Na verdade, toda essa classe que estou trabalhando foi refeita do zero justamente para eu controlar o que estava fazendo e já deixar o layout como null.

Quanto à sua pergunta, o chat é um Jpanel agora e a classe que quero adicionar esse JPanel é um JFrame, mas nesse JFrame criei um outro Jpanel só para conter a classe do chat.

Veja na imagem em anexo como está parecendo na interface.

Obrigado.


I

De uma olhada nos Gerenciadores de Layout, eu não recomendaria a usar o layout como null. Outra coisa, as classes como o JFrame e JPanel por padrão já estão com os layouts BoxLayout e FlowLayout respectivamente, e se você quiser usar esses mesmos não será necessário ficar setando-os no método setLayout().

Me parece que seu layout está bem simples estão o BoxLayout iria te atender muito bem. Por exemplo

JFrame frame  = new JFrame();
        
        //frame.add(BorderLayout.EAST, new Button("Teste 2"));
        //frame.add(new Button("Teste 3"));
        JPanel panel = new JPanel();
        panel.add(new JTextField("Teste"));
        panel.add(new Button("Enviar"));        
        //adiciona ao JFrame
        frame.add(new Button("Figuras e Imagens"));
        frame.add(BorderLayout.EAST, panel);
        ///
        frame.setSize(800, 500);
        frame.setLocationRelativeTo(null); //centraliza
        frame.setVisible(true);
C

Entendi, o problema é que estou chamando uma classe dentro de outra e cada uma tem seu layout…

Como estou tendo contato somente há poucos dias com GUI, esse jogo de layouts ainda é um pouco confuso pra mim…

De qualquer forma obrigado e vou continuar tentando.

Criado 10 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 5
Participantes 3