Duvida em trocar de JPanel atraves de um evento!

11 respostas
D

pessoal estou tendo dificuldade com isso,tenho um JFrame e nele tenho 2 JPanel, na verdade sao 3 sendo que, um JPanel é fixo(local)
contem 2 JRadioButton e os outros 2 estao em outras classes Panel,esses é q eu quero q varie .O q eu quero é qnd clicar em um JRadioButton apareca um JPanel e se clicar em outro JRadioButton apareca outro JPanel no mesmo JFrame logico,meu problema esta ai, nos 2 JRadioButton chamao um evento,e cada JPanel esta associado a um JRadioButton,uso o “getContentPane()” para poder pegar os JPanel,acho q essa logica esta errada,gostaria de saber como faco isso, meu codigo esta aki vlw abracao:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.*;
import javax.swing.*;


public class PopUp extends JFrame
{
    
    private JRadioButton rdb1,rdb2;
    private ButtonGroup grupoRdb;
    private JPanel painel;
    
    
    public PopUp()
    {
        super("faixas Selecionaveis");
        
        setLayout(new BorderLayout());
        
        grupoRdb = new ButtonGroup();
        
        painel = new  JPanel();
        
        rdb1 = new JRadioButton();
        rdb1.setText("Painel 1");
        rdb1.setBounds(20,30,100,100);
        
        rdb2 = new JRadioButton();
        rdb2.setText("Painel 2");
        rdb2.setBounds(60,30,100,100);
        painel.add(rdb1);
        painel.add(rdb2);
        
        grupoRdb.add(rdb1);
        grupoRdb.add(rdb2);
        
        add(painel);
        
                
        getContentPane().add(painel,BorderLayout.NORTH);
        
                  
        
       rdb1.addActionListener
         (
           new java.awt.event.ActionListener()
          {
               public void actionPerformed(java.awt.event.ActionEvent evt) 
               {
                 getContentPane().add(new painel1(),BorderLayout.CENTER);
               }
          }
        );
		
		rdb2.addActionListener
         (
           new java.awt.event.ActionListener()
          {
               public void actionPerformed(java.awt.event.ActionEvent evt) 
               {
                 getContentPane().add(new painel2(),BorderLayout.CENTER);
               }
          }
        );
		
        
    }

}

11 Respostas

T

Aprenda a usar CardLayout, que isso resolve seus problemas (ter N JPanels que você quer mostrar no mesmo espaço, mas um de cada vez.)

Uma vez usando o CardLayout, você simplesmente usa setCard para mostrar o JPanel adequado.

D

blz coloquei o cardLayout,mais nao to conseguindo nem printar alguem pode me ajudar ai,em q eu estou errando

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.event.*;
import javax.swing.*;

public class PopUp extends JFrame
{
    
    private JRadioButton rdb1,rdb2;
    private ButtonGroup grupoRdb;
    private JPanel painel;
    
    public PopUp()
    {
        super("faixas Selecionaveis");
        

        
        //setLayout(new BorderLayout());
        
        JPanel cards = new JPanel(new CardLayout());
        CardLayout lay = new CardLayout();        
        painel = new  JPanel();
        grupoRdb = new ButtonGroup();
        
        rdb1 = new JRadioButton();
        rdb1.setText("teste painel 1");
        rdb1.setBounds(20,30,100,100);
        
        rdb2 = new JRadioButton();
        rdb2.setText("teste painel 2");
        rdb2.setBounds(60,30,100,100);
        painel.add(rdb1);
        painel.add(rdb2);
        
        grupoRdb.add(rdb1);
        grupoRdb.add(rdb2);
        
        //add(painel);
        
        cards.add(painel,"Primeiro");
        
        lay.show(cards,"Primeiro");
                
        //getContentPane().add(painel,BorderLayout.NORTH);
                  
        
       rdb1.addActionListener
         (
           new java.awt.event.ActionListener()
          {
               public void actionPerformed(java.awt.event.ActionEvent evt) 
               {
                 JOptionPane.showMessageDialog(null,"teste");
               }
          }
        );
       
        rdb2.addActionListener
         (
           new java.awt.event.ActionListener()
          {
               public void actionPerformed(java.awt.event.ActionEvent evt) 
               {                
                    JOptionPane.showMessageDialog(null,"teste2");
               }
          }
        );
    }

}
T

Não tem nada errado aqui hein?

JPanel cards = new JPanel(new CardLayout());
         CardLayout lay = new CardLayout();
D

hehehe nem vi!!! vlw

D

blz mais como eu vou mostrar?

T

Amigo, você não se esqueceu do setCard em algum lugar?

D

cara eu nao sei como se apilca cardLayout,c vc for mais exato eu agradeceria,tipo tem q colocar isso e isso … c puder agradeceria muito

T

Aqui vai um exemplo bem tosco.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class TesteCardLayout extends JFrame {
    private JPanel painelBase;
    private JPanel painel1;
    private JPanel painel2;
    private CardLayout cardLayout;
    private JButton botao1;
    private JButton botao2;

    private void initComponents() {
        Container contentPane = getContentPane();
        contentPane.setLayout(new BoxLayout (contentPane, BoxLayout.Y_AXIS));
        // Vamos adicionar um JPanel que vai conter 2 cards, 
        // e 2 botões que escolherão cada um o JPanel adequado
        painelBase = new JPanel();
        cardLayout = new CardLayout();
        painelBase.setLayout (cardLayout);
        // Adicionando os cards
            painel1 = new JPanel();
            painel1.setBackground (Color.RED);
            painelBase.add (painel1, "Painel 1");
            painel2 = new JPanel();
            painel2.setBackground (Color.BLUE); 
            painelBase.add (painel2, "Painel 2");
        // Criando os botões
        botao1 = new JButton ("Escolha o painel 1");
        botao2 = new JButton ("Escolha o painel 2");
        botao1.addActionListener (new ActionListener() {
            public void actionPerformed (ActionEvent e) {
                cardLayout.show (painelBase, "Painel 1");
            }
        });
        botao2.addActionListener (new ActionListener() {
            public void actionPerformed (ActionEvent e) {
                cardLayout.show (painelBase, "Painel 2");
            }
        });
        // Juntando tudo
        contentPane.add (painelBase);
        contentPane.add (botao1);
        contentPane.add (botao2);
        // Só pra não ficar muito pequeno...
        setPreferredSize (new Dimension (200, 300));
    }

    public TesteCardLayout () {
        super ("Teste de Card Layout");
        initComponents();
    }    

    public static void main(String[] args) {
        TesteCardLayout teste = new TesteCardLayout();
        teste.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        teste.pack();
        teste.setVisible (true);
    }
}
D

vlw obrigadao!!!

K

Passando só pra agradecer a voces dois…estou quebrando a cabeca a um tempo pra resolver um problema parecido!
Agora consegui!!
Obrigado aeee galera!

M

O tópico não é meu, mas acompanho o fórum a alguns meses e gostaria de agradecer pela explicação, como o cara aqui em cima falou, resolveu os meus problemas!!! valeeeu

Criado 5 de julho de 2007
Ultima resposta 30 de set. de 2013
Respostas 11
Participantes 4