Sobrepor JPanel

10 respostas
R

Boa noite pessoal, tudo tranquilo?

Estou desenvolvendo uma aplicação na qual preciso exibir o conteúdo do sistema no mesmo JFrame, ir apenas alternando a exibição dos JPanel’s na janela principal…isso para que o conteúdo seja exibido no mesmo local da tela.

Como posso fazer isso? Estou usando o NetBeans 7.0 para fazer a interface gráfica.

Valeu,

abraços

10 Respostas

O

Talvez seja interessante usar JInternalFrame ao invés disso, fica mais elegante por assim dizer…

http://www.vivaolinux.com.br/artigo/Java-Usando-JInternalFrame-de-forma-elegante

Mas, se continuar na opção do JFrame com panel central dinâmico, avisa ai…

t+

R

Dê setContentPane() no JFrame e depois repaint()

R

O_Monge:
Talvez seja interessante usar JInternalFrame ao invés disso, fica mais elegante por assim dizer…

http://www.vivaolinux.com.br/artigo/Java-Usando-JInternalFrame-de-forma-elegante

Mas, se continuar na opção do JFrame com panel central dinâmico, avisa ai…

t+

Vou fazer a tentativa com JInternalFrame, porque serão muitas informações na tela…pelo o visto é a forma que ficará mais organizado.

Farei os testes e posto o resultado aqui.

Valeu,

abraços!

R

Pelo o que eu pesquisei, não há como remover aquela barra no topo e também imobilizar o JInternalFrame né?

Será que consigo fazer da mesma forma com o Panel’s?

E

Para alternar os paineis precisa usar CardLayout. Ou então usar tabbed pane.

R

Como seria o CardLayout?

Conseguiria fazer isso dividindo os panels em arquivos? Porque basicamente todo o sistema seria processado assim, então seriam muitas telas.

E

Esses arquivos que você diz são as classes (arquivo.java)?

Bom, independente disto, é possível sim. O CardLayout é um gerenciador de layout que deixa os painéis sobrepostos e exibe um de cada vez.

Indico que leia estes links e veja se realmente é isso que precisa.

http://download.oracle.com/javase/tutorial/uiswing/layout/card.html

http://devsv.wordpress.com/2011/04/23/layout-manager-vi-card/

Aqui tem um exemplo bem completo do entanglement, só botar pra rodar: http://www.guj.com.br/java/225883-duvidacard-layout#1158302

R

Eric Yuzo:
Esses arquivos que você diz são as classes (arquivo.java)?

Bom, independente disto, é possível sim. O CardLayout é um gerenciador de layout que deixa os painéis sobrepostos e exibe um de cada vez.

Indico que leia estes links e veja se realmente é isso que precisa.

http://download.oracle.com/javase/tutorial/uiswing/layout/card.html

http://devsv.wordpress.com/2011/04/23/layout-manager-vi-card/

Aqui tem um exemplo bem completo do entanglement, só botar pra rodar: http://www.guj.com.br/java/225883-duvidacard-layout#1158302

Segui um dos tutoriais e até consegui fazer com que o Card Layout funcionasse, o problema é o panel só aparece em cima do outro quando dou dois clicks no botão.

Meu código do botão ficou da seguinte maneira:

private void btnClienteActionPerformed(java.awt.event.ActionEvent evt) {                                           
               carregarCliente = new CarregarCliente();       
               panelPrincipal.add(carregarCliente, "panelCarregarCliente");

Tentei usar o setVisble, Repaint, mas com 1 click não está funcionando.

Coloquei um panel principal na tela do sistema (que é o panelPrincipal) e fiz outro para carregar em cima deste primeiro (que é o panelCarregarCliente).

O panel CarregarCliente é outro arquivo do tipo JPanel. Preciso definir um layout para esse panel que irá sobrepor o panel principal com card layout?

Onde mais pode ser o problema???

Valeu, abraços

R

Fazendo testes aqui, percebi que ao executar duas vezes a linha de código, ele aparece com um clique

porque será que só aparece quando executo o método ADD duas vezes?

E

O código que você postou só está criando o JPanel e adicionando ao panelPrincipal. O que precisa ser feito é utilizar os métodos de navegação. Mais ou menos assim:

1 - Cria um JPanel e seta o layout como CardLayout:
JPanel pnlCard; // variável de instância

// Método getter que inicializa o painel caso necessário
private void getPnlCard() {
	if (pnlCard == null) {
		pnlCard = new JPanel();
		pnlCard.setLayout(new CardLayout);

		JPanel pnlCarregarCliente = new CarregarCliente(); // cria o seu painel
		pnlCard.add(pnlCarregarCliente, "panelCarregarCliente"); // adiciona o painel, e passa o nome como segundo parâmetro

		JPanel pnlSalvarCliente = new SalvarCliente(); // cria o seu outro painel
		pnlCard.add(pnlSalvarCliente, "panelSalvarCliente");
	}
	return pnlCard;
}
2 - Adiciona o painel no JFrame:
getContentPane().add(getPnlCard()); // Este código vai no construtor
3 - Os eventos dos botões vão apenas chamar os métodos de navegação:
private void btnCarregarClienteActionPerformed(java.awt.event.ActionEvent evt) {
	((CardLayout) getPnlCard().getLayout()).show(getPnlCard(), "panelCarregarCliente");
}

private void btnSalvarClienteActionPerformed(java.awt.event.ActionEvent evt) {
	((CardLayout) getPnlCard().getLayout()).show(getPnlCard(), "panelSalvarCliente");
}
Perceba que os paineis são criados e adicionados apenas uma vez. Nos eventos dos botões, ocorre apenas a mudança do card que deve ser exibido, tudo gerenciado pelo CardLayout, sem necessidade de setVisible, repaint e afins.
Criado 26 de abril de 2011
Ultima resposta 28 de abr. de 2011
Respostas 10
Participantes 4