[RESOLVIDO]Java Swing como trocar elementos de uma janela sem fecha-la

3 respostas
Ar0n

Já tenho essa dúvida a algum tempo, mas nunca encontrei nada respeito até que tive uma possível ideia que poderia funcionar que seria meio que alterar o painel que é adicionado ao contentPane, só que não esta dando certo, então resolvi postar o código para ver se alguém tem alguma sugestão de como fazer isso?

PS: Para deixar a coisa mais clara vou postar alguns prints do que acontece vou postar um exemplo do que acontece em muitos programas:

http://dl.dropbox.com/u/90655793/1.png
http://dl.dropbox.com/u/90655793/2.png
http://dl.dropbox.com/u/90655793/3.png

Como vocês podem notar os não é outra janela é a mesma apenas alguns elementos da janela são trocados;

Segui o código

package AlterarIconesJanela;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Janela extends JFrame {

	private JPanel contentPane;
	private int trava = 1;	
	JPanel panel_1 = new JPanel(); 

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Janela frame = new Janela();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Janela() {		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 460, 400);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		if (trava == 1){
			panel_1 = mudarJanela();
		}
		JButton btnMudarJanela = new JButton("Mudar janela");
		btnMudarJanela.setBounds(22, 10, 400, 50);
		btnMudarJanela.addActionListener(new ActionListener() {			
			@Override
			public void actionPerformed(ActionEvent e) {
				trava = trava + 1;
				panel_1 = mudarJanela();
				System.out.println(trava);
			}
		});
		contentPane.add(btnMudarJanela);
		contentPane.add(panel_1);		
	}

	public JPanel mudarJanela (){
		//dimensões do panel		 
		int a = 0, b = 72, c = 444, d = 285;
		JPanel panel = new JPanel();
		
		if (trava % 2 == 1){		
			System.out.println("janela1");
			panel.setBounds(a, b, c, d);
			contentPane.add(panel);
			panel.setLayout(null);
			
			JLabel lblNewLabel = new JLabel("Janela 1");
			lblNewLabel.setForeground(Color.BLUE);
			lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 16));
			lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel.setBounds(172, 127, 100, 30);
			panel.add(lblNewLabel);
			return panel;
			
		}else{
			System.out.println("janela2");
			panel.setBounds(a, b, c, d);
			contentPane.add(panel);
			panel.setLayout(null);
			
			JLabel lblNewLabel = new JLabel("Janela 2");
			lblNewLabel.setForeground(Color.RED);
			lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 16));
			lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel.setBounds(172, 127, 100, 30);
			panel.add(lblNewLabel);
			return panel;
		}
	}
}

3 Respostas

E

Você pode usar vários layout em uma mesma tela, nesta tela de exemplo que vc enviou as imagens vc pode usar um BorderLayout e do lado esquerdo vc colocar uma JTree e no centro vc coloca um card layout que é um tipo de layout que vc pode trocar o “painel” está sendo exibido, os paineis ficam um sobre o o outro, como se estivessem empilhados. A cada clique em um item da JTree é verificado qual foi clicado e trocado o layout do centro.

Então acredito eu que a solução para vc é trabalhar com o card layout :wink:

espero que ajude, abs,

Ar0n

Evandro_Contato:
Você pode usar vários layout em uma mesma tela, nesta tela de exemplo que vc enviou as imagens vc pode usar um BorderLayout e do lado esquerdo vc colocar uma JTree e no centro vc coloca um card layout que é um tipo de layout que vc pode trocar o “painel” está sendo exibido, os paineis ficam um sobre o o outro, como se estivessem empilhados. A cada clique em um item da JTree é verificado qual foi clicado e trocado o layout do centro.

Então acredito eu que a solução para vc é trabalhar com o card layout :wink:

espero que ajude, abs,

Ajudou muito cara agora já tenho uma direção para focar vlw mesmo :thumbup:

Entretanto, agora estou tendo dificuldades com o cardLayout não estou conseguindo alterar entre os paneis, será que você sabe como fazer isso?

Editado: Pode deixar cara conseguir :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: vlw mesmo a força :smiley: :smiley: :smiley: :smiley: :smiley:

E

Maravilha Ar0n, este layout realmente tem ótimas funcionalidades :slight_smile:

bom domingo aí pra vc, abraco,

Evandro

Criado 12 de janeiro de 2013
Ultima resposta 13 de jan. de 2013
Respostas 3
Participantes 2