Duvida com botão

Olá, sou iniciante e estou “apanhando” um pouco aqui com uma coisa que parece simples…

Meu código é esse:

[code]import java.awt.;
import javax.swing.
;
import java.awt.event.*;

public class Janela_Alunos extends JFrame implements ActionListener
{
JButton b_cad_aluno, b_alt_aluno, b_pesquisar; // botões
JLabel texto; // para as legendas
JTextField campo_pesquisa; // campo de texto

public Janela_Alunos(String nome)
{
super(nome);
this.setLayout(null);

texto = new JLabel(“Cadastro / Alteração dos Alunos”); // legenda
texto.setBounds(20, 10, 190, 10);
this.add(texto);

// INICIO DOS BOTÕES

b_cad_aluno = new JButton(“Cadastrar”);
b_cad_aluno.setForeground(Color.black);
b_cad_aluno.setBounds(20, 30, 100, 25);
this.add(b_cad_aluno);

b_alt_aluno = new JButton(“Alterar”);
b_alt_aluno.addActionListener(this);
b_alt_aluno.setForeground(Color.black);
b_alt_aluno.setBounds(130, 30, 100, 25);
this.add(b_alt_aluno);

// FIM DOS BOTOES

this.setSize(500, 310); // largura e altura da janela
this.setVisible(true);
this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

}

// AÇÃO PARA OS BOTÕES

public void actionPerformed(ActionEvent e)
{
if (e.getSource()==(b_alt_aluno))
{
texto = new JLabel(“Digite o nome do aluno:”); // legenda
texto.setBounds(20, 60, 95, 30);
this.add(texto);
campo_pesquisa = new JTextField(20); // campo de texto para a pesquisa
campo_pesquisa.setBounds(300, 110, 95, 30);
this.add(campo_pesquisa);
}
}

// FIM DA AÇÃO PARA OS BOTÕES

public static void main(String[] args)
{
new Janela_Alunos(“Titulo da janela”);
}

}[/code]

O que eu quero fazer é o seguinte, quando eu clicar no botão ALTERAR quero que apareça um texto e uma caixa de texto. Só que ambos não esta aparecendo, mas se você clicar embaixo do botão ALTERAR (foi onde eu posicionei a caixa de texto) ai sim ela aparecerá. Tipo, eu tenho que adivinhar onde a caixa esta na janela, e quando eu clicar em cima dela ai sim ela aparece.
Estou esquecendo de alguma coisa no código? :?

Outra dúvida, se estiver aparecendo alguns botões e campos e quando eu clicar no botão CADASTRAR eu quero que desapareça tudo e fique nessa janela só o que eu definir dentro da ação do botão (entenderam?)

Se alguém puder me ajudar desde ja fico agradecido.

Tenta assim

[code]import java.awt.;
import javax.swing.
;
import java.awt.event.*;

public class Janela_Alunos extends JFrame implements ActionListener
{
JButton b_cad_aluno, b_alt_aluno, b_pesquisar; // botões
JLabel texto,texto2; // para as legendas
JTextField campo_pesquisa; // campo de texto

public Janela_Alunos(String nome)
{
    super(nome);
    this.setLayout(null);
    texto = new JLabel("Cadastro / Alteração dos Alunos"); // legenda
    texto.setBounds(20, 10, 190, 10);
    this.add(texto);

    b_cad_aluno = new JButton("Cadastrar");
    b_cad_aluno.setForeground(Color.black);
    b_cad_aluno.setBounds(20, 30, 100, 25);
    this.add(b_cad_aluno);

    b_alt_aluno = new JButton("Alterar");
    b_alt_aluno.addActionListener(this);
    b_alt_aluno.setForeground(Color.black);
    b_alt_aluno.setBounds(130, 30, 100, 25);
    this.add(b_alt_aluno);

    texto2 = new JLabel("Digite o nome do aluno:"); // legenda
    texto2.setBounds(20, 60, 95, 30);
    this.add(texto2);
    texto2.show(false);

    campo_pesquisa = new JTextField(20); // campo de texto para a pesquisa
    campo_pesquisa.setBounds(115, 60, 95, 30);
    this.add(campo_pesquisa);
    campo_pesquisa.show(false);

    this.setSize(500, 310); // largura e altura da janela
    this.setVisible(true);
    this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent e) //Ação para os botões
{
    if (e.getSource()==b_alt_aluno)
        {
            texto2.show();
            campo_pesquisa.show();
        }
    } // FIM DA AÇÃO PARA OS BOTÕES

public static void main(String[] args)
{
    new Janela_Alunos("Titulo da janela");
}

}[/code]

Oi Felipe, tudo bem?

Fiz algumas alterações no seu código, mas a lógica que eu usei foi adicionar tudo na hora de criar e setar como invisivel (atraves do setVisible()) as coisas que não queriamos que fossem mostradas. Aí quando clica no botão setamos elas como visiveis.

Da uma olhada no codigo, qualquer duvida estamos aí.

Até

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Janela_Alunos extends JFrame implements ActionListener {
	JButton b_cad_aluno, b_alt_aluno, b_pesquisar;
	JLabel texto;
	JTextField campo_pesquisa;

	public Janela_Alunos(String nome) {
		super(nome);

		// Criei um jPanel para os botoes com o FlowLayout, assim a largura
		// deles eh respeitada.
		JPanel pSuperiorBotoes = new JPanel(new FlowLayout());
		b_cad_aluno = new JButton("Cadastrar");

		b_alt_aluno = new JButton("Alterar");
		b_alt_aluno.addActionListener(this);

		// Criei um jPanel para os campos
		JPanel pAlterar = new JPanel(new GridLayout(1, 2));
		texto = new JLabel("");
		campo_pesquisa = new JTextField(20);

		// Deixei o JLabel e o JTextField "invisiveis"
		texto.setVisible(false);
		campo_pesquisa.setVisible(false);

		pSuperiorBotoes.add(b_cad_aluno);
		pSuperiorBotoes.add(b_alt_aluno);
		pAlterar.add(texto);
		pAlterar.add(campo_pesquisa);

		// Adicionei o painel de botoes ao norte da janela (O layout padrao para
		// a janela eh BorderLayout)
		this.getContentPane().add(pSuperiorBotoes, BorderLayout.NORTH);
		// Adicionei o painel alterar ao centro da janela
		this.getContentPane().add(pAlterar, BorderLayout.CENTER);

		// Regula automaticamente a altura e largura conforme o necessario.
		this.pack();

		this.setVisible(true);
		this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == (b_alt_aluno)) {
			// Mudei o texto do JLabel
			texto.setText("Digite o nome do aluno:");
			// Mostrar JLabel
			texto.setVisible(true);
			// Mostrar JTextField
			campo_pesquisa.setVisible(true);
		}
	}

	public static void main(String[] args) {
		new Janela_Alunos("Titulo da janela");
	}

}

Estou no trabalho agora e não tem como testar, mas eu entendi a lógica que vocês fizeram.

obrigado pela ajuda Guilherme e Emerson :wink: