JPanel "populado" dinamicamente

4 respostas
rafagil

Olá pessoal,

Estou meio que iniciando em swing e gostaria de fazer um Panel ser “populado” automaticamente quando um togglebutton for pressionado.

Montei meu frame conforme o código abaixo, porém, quando clico no botão, nada acontece, porém se eu o mantiver “clicado” e redimensionar o frame, o panel aparece, da forma que eu queria.

Já tentei colocar repaint pra todo lado, mas não estou entendendo o motivo de não aparecer.

Se alguém também souber alguma outra forma melhor de fazer isto eu agradeço.

public class Framezao extends JFrame{

	private JPanel painelEsquerdo = new JPanel();
	private JPanel painelPrincipal = new JPanel();
	private JPanel painelDetalhes = new JPanel();
	private JToggleButton botaoMaisDetalhes;
	
	public Framezao() {
		iniciaComponentes();
	}
	
	public void iniciaComponentes() {
		painelEsquerdo = new JPanel();
		painelPrincipal = new JPanel();
		painelDetalhes = new JPanel();
		
		botaoMaisDetalhes = new JToggleButton("Mais Detalhes");
		botaoMaisDetalhes.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent evt) {
				if (botaoMaisDetalhes.isSelected()) {
					painelDetalhes.add(new JLabel("Informação 1"));
					painelDetalhes.add(new JLabel("Informação 2"));
					painelDetalhes.add(new JLabel("Informação 3"));
				} else {
					painelDetalhes.removeAll();
				}
			}
			
		});

		painelDetalhes.setLayout(new BoxLayout(painelDetalhes, BoxLayout.Y_AXIS));
		
		painelEsquerdo.setBackground(new Color(204, 204, 204));
		painelEsquerdo.setLayout(new BoxLayout(painelEsquerdo, BoxLayout.Y_AXIS));
		
		painelEsquerdo.add(botaoMaisDetalhes);
		painelEsquerdo.add(painelDetalhes);
		
		getContentPane().add(painelEsquerdo, BorderLayout.WEST);
		getContentPane().add(painelPrincipal, BorderLayout.CENTER);
		
		setMinimumSize(new Dimension(640,480));		
	}
	
	public static void main(String[] args) {
		new Framezao().setVisible(true);
	}
	
}

Valew

4 Respostas

Jorgev

vc quer dizer clicar em um botao e aparecer outro botao na tela, por exemplo?

Marky.Vasconcelos

Para aparecer os componentes voce precisa usar o revalidate e não o repaint

rafagil

Opa, Valeu pelas dicas pessoal.

Na vdd tive uma outra idéia, crio todo o panel com ele “invisible”, e daí ao clicar eu mudo o visible para true. Daí funciona também.

Vou testar o revalidate, valeu!

Jorgev

Eu ia sugerir que vc fizesse isso. Eu já fiz alguma coisa assim, onde eu deixava as coisas invisiveis e depois ia mostrando.

boa sorte amigo.

Criado 14 de novembro de 2008
Ultima resposta 15 de nov. de 2008
Respostas 4
Participantes 3