Add Jpanel de uma classe externa a interface principal

6 respostas
rodrigoleite

Olá, Boa noite

estou tendo problemas, pois gostaria de fazer algo igual aos sites.

por exemplo
tenho uma outra classe/jpanel, e gostraia de incluir ela no meu jpanel principal assim que o usuário clicar no menu

tpw:

menu cadastrar -> abre no jpanel principal a classe/jpanel onde está a interface de cadastro.
menu apagar -> abre no jpanel principal a classe/jpanel onde está a interface de exclusão

e assim por diante.

não gostraia de usar o método setVisible, e colocar tudo na classe principal, gostaria de puchar as classes requeridas pelo usuário para página prinicpal.

desde já agradeço.

6 Respostas

thundercas

Ueh… Cria um JFrame principal e utiliza os métodos ADD e REMOVE do JFrame…

Lembrando que o ideal seria trabalhar com JFrames independentes, já que não quer carregar uma tla em cima da outra

renzonuccitelli

Recomendo que vc dê uma olhada na classe JDesktopPane e JInternalFrame

rodrigoleite

Não não, não gostrai de usar Jframes, gostaria que o s Japensl carregassem dentro de um jframe central:

mais ou menos assim:

o Usuário clica nos botões, e alí nakele pedaço verde, que eu vou deixar pra carregar os jpanels, os mesmos serão carregados de forma dinâmica, conforme o usuário vai clicando nos botões.

desde já agradeço.

renzonuccitelli

Bom, vc poderia implementar o que vc quer usando dois paineis e o BorderLayout. Vc faria um painel com os seus botões e os colocaria na posição esquerda. Aí vc faria um método para adicionar os painéis de visualização no centro. Uma outra opção seria vc utilizar abas, usando a classe JTabbedPane (acho que é esse o nome). Espero ter te ajudado.

M

Algum desses pode ajudar:

http://java.sun.com/docs/books/tutorial/uiswing/components/layeredpane.html
http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html

renzonuccitelli

Se vc não quiser manter as instacias dos painels que for adicionando, vc não vai precisar usar GUI's de camadas. Fiz um exemplo simples pra vc ver:

public class PainelDividido extends JPanel {
	private JPanel painelCentral=null;
	public PainelDividido() {
		super(new BorderLayout());
		this.add(getPainelBotoes(),BorderLayout.WEST);
	}
	
	private JPanel getPainelBotoes(){
		JPanel painelBotoes=new JPanel();
		GroupLayout layout=new GroupLayout(painelBotoes);
		painelBotoes.setLayout(layout);
		
		layout.setAutoCreateContainerGaps(true);
		layout.setAutoCreateGaps(true);
		
		JPanel painel1=new JPanel();
		painel1.add(new JLabel("Painel 1"));
		JButton botao1=new JButton("Botão 1");
		botao1.addActionListener(new ListenerBotao(this,painel1));
		JPanel painel2=new JPanel();
		painel2.add(new JLabel("Painel 2"));
		JButton botao2=new JButton("Botão 2");
		botao2.addActionListener(new ListenerBotao(this,painel2));
		layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
				.addComponent(botao1)
				.addComponent(botao2)
		);
		layout.setVerticalGroup(layout.createSequentialGroup()
				.addComponent(botao1)
				.addComponent(botao2)
		);
		return painelBotoes;
	}
	
	public void setPainelCentral(JPanel panel){
		if(painelCentral!=null)
			this.remove(painelCentral);
		System.out.println(this.getComponentCount());
		panel.setBorder(BorderFactory.createTitledBorder("Painel Central"));
		this.add(panel,BorderLayout.CENTER);
		if(painelCentral!=null){
			this.remove(painelCentral);
		}
		
		painelCentral=panel;
		this.validate();
		this.repaint();
	}

}
public class ListenerBotao implements ActionListener {
	public ListenerBotao(PainelDividido painelDividido,JPanel painelASerInserido) {
		super();
		this.painelDividido = painelDividido;
		this.painelASerInserido=painelASerInserido;
		
	}
	private PainelDividido painelDividido;
	private JPanel painelASerInserido;
	public void actionPerformed(ActionEvent e) {
		painelDividido.setPainelCentral(painelASerInserido);

	}

}
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame frame= new JFrame();
		frame.setSize(600, 400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setContentPane(new PainelDividido());
		frame.setVisible(true);

	}

}
Criado 24 de dezembro de 2008
Ultima resposta 31 de dez. de 2008
Respostas 6
Participantes 4