Não funfa o ActionListener

5 respostas
C

Alguém consegue ver o q está errado?? Já procurei!!! li… reli… e naum acho o erro!!! Quando clico no button “Exibi” naum acontece nada!!!

import java.awt.;
import java.awt.event.
;

public class Janela extends Frame{

Button b;

Aluno a;

TextField te,id;
public Janela(){
	Aluno a = new Aluno("Maico",21);
            setSize(400,150);
	
	setLayout(new BorderLayout());
	setTitle("Teste");
	// TrataBotoes tb = new TrataBotoes();
             [b]Button b = new Button();[/b]
            
            [b]b.addActionListener(new TrataBotoes());[/b]
            
	Panel p = new Panel();
	p.setLayout(new FlowLayout());
	p.setSize(100,100);
	
	//b.setSize(60,30);
	//b.setLocation(10,40);
	b.setLabel("Exibir");
	p.add(b);
	//b1.setSize(60,30);
	//b1.setLocation(10,60);
//	b1.setLabel("Teste1");
//	p.add(b1);
	add(p,BorderLayout.SOUTH);
	
	Panel p1 = new Panel();
	p1.setLayout(null);
	add(p1);
	Label l2 = new Label("Nome:");
	Label l3 = new Label("Idade: ");
	
	l2.setLocation(10,20);
	l2.setSize(43,30);
	l3.setLocation(10,45);
	l3.setSize(43,30);
	
	p1.add(l2);
	p1.add(l3);
	
	TextField te = new TextField();
	TextField id = new TextField();
	
	te.setLocation(53,25);
	te.setSize(300,20);
	id.setLocation(53,50);
	id.setSize(300,20);
	
	p1.add(te);
	p1.add(id);
	
	addWindowListener(new Sair());
	
}
class Sair extends WindowAdapter {
public void windowClosing (WindowEvent e) {
	System.exit(0);
}
}

class TrataBotoes implements ActionListener{

public void actionPerformed	(ActionEvent ae){

if (ae.getSource()==b){

te.setText(String.valueOf(a.nome));

System.out.println(a.nome);

}

}        }

public static void main(String[]args){

Janela j = new Janela();

j.setVisible(true);
}

}

5 Respostas

cariocathi

vc está redeclarando b dentro do código… é por isso q não funciona ele pega a instancia de b local e compara com a instacia de b atributo, por isso q não funciona.

c ao invés disso vc fizer b = new JButton(); ao invés de JBUtton b = new JButton(); vai funcionar… :slight_smile:

C

Mas só q eu preciso de declarar Button b; no topo da classe por causa do escopo certo??

Daí eu fiz o q vc falou… no topo da classe eu coloquei Button b = new Button(); e ele começou a retornar esse erro qndo clico no botão!!!

java.lang.NullPointerException

at Janela$TrataBotoes.actionPerformed(Janela.java:71)

at java.awt.Button.processActionEvent(Button.java:382)

at java.awt.Button.processEvent(Button.java:350)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
I

Por quê você declarou os atributos b, a, te e id como atributos de instancia e dentro código você não faz referência a eles?? Não declare eles novamente dentro do código…senão quando você compara no código

if (ae.getSource()==b)

b está como null por padrão, e consequentemente o teste será falso…

fenrir
Analise a diferença entre o seu código e este, e verá o erro! :wink:
import java.awt.*;
import java.awt.event.*;

public class Janela extends Frame{
    Button b;
    Aluno a;
    TextField te,id;

    public Janela(){
        a = new Aluno("Maico",21);
        setSize(400,150);

        setLayout(new BorderLayout());
        setTitle("Teste");
        // TrataBotoes tb = new TrataBotoes();
        b = new Button();

        b.addActionListener(new TrataBotoes());

        Panel p = new Panel();
        p.setLayout(new FlowLayout());
        p.setSize(100,100);

        //b.setSize(60,30);
        //b.setLocation(10,40);
        b.setLabel("Exibir");
        p.add(b);
        //b1.setSize(60,30);
        //b1.setLocation(10,60);
        // b1.setLabel("Teste1");
        // p.add(b1);
        add(p,BorderLayout.SOUTH);

        Panel p1 = new Panel();
        p1.setLayout(null);
        add(p1);
        Label l2 = new Label("Nome:");
        Label l3 = new Label("Idade: ");

        l2.setLocation(10,20);
        l2.setSize(43,30);
        l3.setLocation(10,45);
        l3.setSize(43,30);

        p1.add(l2);
        p1.add(l3);

        te = new TextField();
        id = new TextField();

        te.setLocation(53,25);
        te.setSize(300,20);
        id.setLocation(53,50);
        id.setSize(300,20);

        p1.add(te);
        p1.add(id);

        addWindowListener(new Sair());

    }

    class Sair extends WindowAdapter {
        public void windowClosing (WindowEvent e) {
            System.exit(0);
        }
    }

    class TrataBotoes implements ActionListener{
        public void actionPerformed (ActionEvent ae){
            if (ae.getSource()==b){
                te.setText(String.valueOf(a.nome));
                System.out.println(a.nome);
            }
        }
    }

    public static void main(String[]args){
        Janela j = new Janela();
        j.setVisible(true);
    }
}
cariocathi

“ccxvi”:
Mas só q eu preciso de declarar Button b; no topo da classe por causa do escopo certo??

Daí eu fiz o q vc falou… no topo da classe eu coloquei Button b = new Button(); e ele começou a retornar esse erro qndo clico no botão!!!

java.lang.NullPointerException

at Janela$TrataBotoes.actionPerformed(Janela.java:71)

at java.awt.Button.processActionEvent(Button.java:382)

at java.awt.Button.processEvent(Button.java:350)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

</blockquote>

naum era pra fazer no atributo,(topo da classe). Era so pra mudar no seu codigo, onde tinha Button b, dentro do método apenas tirar o button

Criado 28 de novembro de 2003
Ultima resposta 28 de nov. de 2003
Respostas 5
Participantes 4