Problemas para posicionar JPanels diferentes no Centro do BorderLayout

4 respostas
cRazy.N13

Boa Tarde a todos.

Estou com um problema e já tentei de varias maneiras, mas nenhuma deu certo. Eu gostaria de ao clicar em um botão, seu evento selecionar qual dos JPanels irão aparecer no centro do BorderLayout.

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JOptionPane;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.Container;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Tela extends JFrame implements ActionListener{

	private BorderLayout borderLayout;
	private FlowLayout flowLayout;
	private GridLayout gridLayout;
	private Container container;
	
	private JPanel jpCima;
	private JLabel jlbPF;
	private JButton jbPF;
	private JLabel jlbPJ;
	private JButton jbPJ;
	
	private JPanel jpCentro;
	private JLabel jlbPeF;
	private JLabel jlbPeFi;
	private JLabel jlbNome;
	private JTextField jtfNome;
	private JLabel jlbRG;
	private JTextField jtfRG;
	private JLabel jlbAAA;
	private JTextField jtfAAA;
	private JLabel jlbBBB;
	private JTextField jtfBBB;
	private JLabel jlbCCC;
	private JTextField jtfCCC;
	private JLabel jlbDDD;
	private JTextField jtfDDD;
	
	private JPanel jpEsquerda;
	private JLabel jlbEEE;
	private JTextField jtfEEE;
	private JLabel jlbFFF;
	private JTextField jtfFFF;
	private JLabel jlbGGG;
	private JTextField jtfGGG;
	private JLabel jlbHHH;
	private JTextField jtfHHH;
	
	private JPanel jpBaixo;
	private JButton jbCadastrar;
	private JButton jbVoltar;
	
	public boolean aux;
	
	public Tela(){
		iniciaTela();
		jpCima();
		jpBaixo();
		jpCentro();
		jpEsquerda();
		//jpDireita();
		configComponentes();
	}
	
	public void iniciaTela(){
		setTitle("Tela");
		//pack();
		setSize(350,200);
		setLocationRelativeTo(null);
		setResizable(false);
		setVisible(true);
		validate();	
	}
	
		
	public void jpCima(){
		jpCima = new JPanel();
		jlbPF = new JLabel("Pessoa Fisica");
		jbPF = new JButton("PF");
		jbPF.addActionListener(this);
		jlbPJ = new JLabel("Pessoa Juridica");
		jbPJ = new JButton("PJ");
		jbPJ.addActionListener(this);
		flowLayout = new FlowLayout();
		jpCima.setLayout(flowLayout);
		jpCima.add(jlbPF);
		jpCima.add(jbPF);
		jpCima.add(jlbPJ);
		jpCima.add(jbPJ);
		jpCima.setVisible(true);
	}
	
	public void jpBaixo(){
		jpBaixo = new JPanel();
		jbCadastrar = new JButton("Cadastrar");
		jbCadastrar.addActionListener(this);
		jbVoltar = new JButton("Voltar");
		jbVoltar.addActionListener(this);
		flowLayout = new FlowLayout();
		jpBaixo.setLayout(flowLayout);
		jpBaixo.add(jbCadastrar);
		jpBaixo.add(jbVoltar);
		jpBaixo.setVisible(false);
	}
	
	public void jpCentro(){
		jpCentro = new JPanel();
		jlbPeF = new JLabel("PESSOA ", JLabel.RIGHT);
		jlbPeFi = new JLabel("FÍSICA", JLabel.LEFT);
		jlbNome = new JLabel("Nome", JLabel.CENTER);
		jtfNome = new JTextField(10);
		jlbRG = new JLabel("RG", JLabel.CENTER);
		jtfRG = new JTextField(10);
		jlbAAA = new JLabel("CPF", JLabel.CENTER);
		jtfAAA = new JTextField(10);
		jlbBBB = new JLabel("Endereço", JLabel.CENTER);
		jtfBBB = new JTextField(10);
		jlbCCC = new JLabel("CEP", JLabel.CENTER);
		jtfCCC = new JTextField(10);
		jlbDDD = new JLabel("Telefone", JLabel.CENTER);
		jtfDDD = new JTextField(10);
		gridLayout = new GridLayout(8,2,0,0);
		jpCentro.setLayout(gridLayout);
		jpCentro.add(jlbPeF);
		jpCentro.add(jlbPeFi);
		jpCentro.add(jlbNome);
		jpCentro.add(jtfNome);
		jpCentro.add(jlbRG);
		jpCentro.add(jtfRG);
		jpCentro.add(jlbAAA);
		jpCentro.add(jtfAAA);
		jpCentro.add(jlbBBB);
		jpCentro.add(jtfBBB);
		jpCentro.add(jlbCCC);
		jpCentro.add(jtfCCC);
		jpCentro.add(jlbDDD);
		jpCentro.add(jtfDDD);
		jpCentro.setVisible(false);
	}
	
	public void jpEsquerda(){
		jpEsquerda = new JPanel();
		jlbEEE = new JLabel("Nome");
		jtfEEE = new JTextField(15);
		jlbFFF = new JLabel("RG");
		jtfFFF = new JTextField(15);
		jlbGGG = new JLabel("CNPJ");
		jtfGGG = new JTextField(15);
		jlbHHH = new JLabel("Nome da Empresa");
		jtfHHH = new JTextField(15);
		gridLayout = new GridLayout(8,2,0,0);
		jpEsquerda.setLayout(gridLayout);
		jpEsquerda.add(jlbEEE);
		jpEsquerda.add(jtfEEE);
		jpEsquerda.add(jlbFFF);
		jpEsquerda.add(jtfFFF);
		jpEsquerda.add(jlbGGG);
		jpEsquerda.add(jtfGGG);
		jpEsquerda.add(jlbHHH);
		jpEsquerda.add(jtfHHH);
		jpEsquerda.setVisible(false);
	}
	
	/*
	public void jpDireita(){
		
	}
	*/
	
	public void msg(){
		JOptionPane.showMessageDialog(null, "Cliente Cadastrado com Sucesso!");
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == jbPF){
			aux = true;
			//container.add(jpCentro, BorderLayout.CENTER);
			jpCentro.setVisible(true);
			//jpEsquerda.setVisible(false);
			jpBaixo.setVisible(true);
			jpCima.setVisible(false);
			validate();
		}
		else if(e.getSource() == jbPJ){
			aux = false;
			jpEsquerda.setVisible(true);
			//jpCentro.setVisible(false);
			jpBaixo.setVisible(true);
			jpCima.setVisible(false);
			validate();
		}
		else if(e.getSource() == jbCadastrar){
			jpCentro.setVisible(false);
			jpEsquerda.setVisible(false);
			jpBaixo.setVisible(false);
			jpCima.setVisible(true);
			msg();
			validate();
		}
		else if(e.getSource() == jbVoltar){
			jpCentro.setVisible(false);
			jpEsquerda.setVisible(false);
			jpBaixo.setVisible(false);
			jpCima.setVisible(true);
			validate();
		}
		/*
		if(btPF.isSelected()){
		container.add(jpCentro, BorderLayout.CENTER);
		}
		else if(btPJ.isSelected()){
		container.add(jpEsquerda, BorderLayout.CENTER);//EAST
		}
		*/	
	}

	public void configComponentes(){
		container = getContentPane();
		borderLayout = new BorderLayout();
		setLayout(borderLayout);
		
		container.add(jpCima, BorderLayout.NORTH);
		container.add(jpCentro, BorderLayout.CENTER);
		container.add(jpEsquerda, BorderLayout.EAST);//EAST
		container.add(jpBaixo, BorderLayout.SOUTH);
		
		validate();
		
		/* if(aux == true){ 
			container.add(jpCentro, BorderLayout.CENTER); 
			} 
			if(aux == false){ 
			container.add(jpEsquerda, BorderLayout.CENTER);//EAST 
			} 
		*/ 
		}			
} 

import javax.swing.*;

public class Main{

	public static void main(String[]args){
		Tela tela = new Tela();
		tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

}

P.s: O campo para setar o JPanel que teria que aparecer no centro do BorderLayout está comentado. Acredito que o erro esteja ali, mas não pensei em nenhuma outra maneira de ajustar isso.

4 Respostas

Jeanfbs

kara não entendi ainda qual seu problema??

Eric_Yuzo

Você pode adicionar no Centro, um outro painél usando CardLayout. Neste painél com CardLayout, você adiciona os painéis que quer exibir. Assim, pode usar o método show do CardLayout pra exibir um painél de cada vez.

I

acho que vc deveria usar o setBorderLayout dentro do container, e não do JFrame
container.setLayout(new BorderLayout());

I

Remova a linha 226 e 227, vc ja está usando o BorderLayout, não há porque usar de novo ele.

Criado 12 de setembro de 2013
Ultima resposta 14 de set. de 2013
Respostas 4
Participantes 4