Dúvida com botões

4 respostas
Y

Crio dois botões e quero que clicando no botão 1 apareça o novoBotao1,
e clicando no botão 2 apareça o novoBotao2.
Mas independente de qual botão eu clicar, sempre aparece o novoBotao1.
O que estou errando?

import javax.swing.*;
import java.awt.event.*;

// 
public class Teste2 extends JFrame implements ActionListener {
	// 
	JButton botao1, botao2;

	// 
	public Teste2() {
		setSize(800, 600);
		// 
		botao1 = new JButton("Botao1");
		botao1.setLocation(20, 20);
		botao1.setSize(80, 40);

		botao2 = new JButton("Botão2");
		botao2.setLocation(120, 20);
		botao2.setSize(80, 40);
		// 
		getContentPane().setLayout(null);
		getContentPane().add(botao1);

		getContentPane().setLayout(null);
		getContentPane().add(botao2);
		// 
		setVisible(true);
		// 
		/*
		 * Adiciona listener para tratar o evento do clique do botao
		 */
		botao1.addActionListener(this);
		botao2.addActionListener(this);
	}

	// 
	public static void main(String args[]) {
		new Teste2();
	}

	// 
	// 
	public void actionPerformed(ActionEvent e) {
		JButton novoBotao1;
		// 
		novoBotao1 = new JButton("Novo Botao 1");
		novoBotao1.setSize(150, 40);
		novoBotao1.setLocation(100, 100);

		//
		getContentPane().add(novoBotao1);

		repaint(); // redesenha a tela (agora com o novo botao)
	}

	// 

	public void actionPerformed1(ActionEvent e) {
		JButton novoBotao2;
		// 

		novoBotao2 = new JButton("Novo Botão 2");
		novoBotao2.setLocation(200, 200);
		novoBotao2.setSize(150, 40);
		//
		getContentPane().add(novoBotao2);

		repaint(); // redesenha a tela (agora com o novo botao)
	}

}

4 Respostas

spadinha

crie apenas um actionperformed

e nele teste o ActionEvent para descrobrir de qual source que veio a chamada

dae vc pode controlar se vc cria os 2 botoes ou somente o primeiro

R

Olha estou começando com GUI, mas vi que o erro é o seguinte.

Quando você implementa a ActionListener interface você deve sobrescrever o métodos ActionPerformed para que responda uma ação.
Portanto você sobrescreveu corretamente para o botão1 e ele está funcionando.

Os dois estão usando o this para referenciar portanto fazem a mesma coisa criam o botão.

botao1.addActionListener(this);  
botao2.addActionListener(this);

Você deve criar inner classes e cada uma delas sobrescrever o método ActionPerformed
E depois ao invés de utilizar o this utilizar um listener com o nome da class

botao1.addActionListener(new TesteListener());
Cristiano_de_Barros

Como o spadinha falou, você deve identificar o botão que
ativou o evento, resumindo:

import javax.swing.*;
import java.awt.event.*;

public class Teste2 extends JFrame implements ActionListener {

    JButton botao1, botao2;

    public Teste2() {
        setSize(800, 600);
        botao1 = new JButton("Botao1");
        botao1.setLocation(20, 20);
        botao1.setSize(80, 40);
        botao2 = new JButton("Botão2");
        botao2.setLocation(120, 20);
        botao2.setSize(80, 40);
        getContentPane().setLayout(null);
        getContentPane().add(botao1);
        getContentPane().setLayout(null);
        getContentPane().add(botao2);
        setVisible(true);
        botao1.addActionListener(this);
        botao2.addActionListener(this);
    }

    public static void main(String args[]) {
        new Teste2();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == botao1) {
            JButton novoBotao1;
            novoBotao1 = new JButton("Novo Botao 1");
            novoBotao1.setSize(150, 40);
            novoBotao1.setLocation(100, 100);
            getContentPane().add(novoBotao1);
            repaint();
        }
        if (e.getSource() == botao2) {
            JButton novoBotao2;
            novoBotao2 = new JButton("Novo Botão 2");
            novoBotao2.setLocation(200, 200);
            novoBotao2.setSize(150, 40);
            getContentPane().add(novoBotao2);
            repaint();
        }
    }
}
Y

isso ae…
vlw…

Criado 23 de maio de 2008
Ultima resposta 25 de mai. de 2008
Respostas 4
Participantes 4