Implementação de MouseListener, dúvida métodos na mesma classe

3 respostas
wID

A Classe abaixo não compila e informação o seguinte erro:

D:\Java\Exercicios>javac Janela.java
Janela.java:3: Janela is not abstract and do
eClicked(java.awt.event.MouseEvent) in java.
public class Janela extends Frame implements
       ^
Janela.java:104: cannot find symbol
symbol  : variable getSource
location: class java.awt.event.MouseEvent
                if (e.getSource == btOk)
                     ^
Janela.java:104: cannot find symbol
symbol  : variable btOk
location: class Janela
                if (e.getSource == btOk)
                                   ^
Janela.java:107: cannot find symbol
symbol  : variable getSource
location: class java.awt.event.MouseEvent
                if (e.getSource == btStop)
                     ^
Janela.java:107: cannot find symbol
symbol  : variable btStop
location: class Janela
                if (e.getSource == btStop)
import java.awt.*;
import java.awt.event.*;
public class Janela extends Frame implements MouseListener{

	private Button btTotaliza;
	private TextField tNome;
	private Label lNome;
	private Label lIdade;
	private TextField tIdade;
	private Label lSexo;
	private CheckboxGroup group;
	private Checkbox cbFem;
	private Checkbox cbMasc;
	private Label lTotalFeminino;
	private Label lTotalMasculino;
	private Label lStatus;
	private TextField msg;
	
	
	
	public Janela() {
		super("Cadastro para emprego");
		
		// define botão sair como fechar
		//this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
		
		this.setLayout(new GridLayout(7,1));
		
		Panel p1 = new Panel();
		p1.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.add(p1);
		
		lNome = new Label("Nome:");
		tNome = new TextField(30);
		p1.add(lNome); 
		p1.add(tNome);
		
		Panel p2 = new Panel();
		p2.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.add(p2);
		
		lIdade = new Label("Idade:");
		tIdade = new TextField(10);
		p2.add(lIdade);
		p2.add(tIdade);
		
		Panel p4 = new Panel();
		p4.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.add(p4);
		
		Label lSexo = new Label("Sexo");
		p4.add(lSexo);
		
		group = new CheckboxGroup();
		cbFem = new Checkbox("Feminino",group,false);
		cbMasc = new Checkbox("Masculino",group,false);
		p4.add(cbFem);
		p4.add(cbMasc);
		
		Panel p5 = new Panel();
		p5.setLayout(new FlowLayout(FlowLayout.RIGHT));
		this.add(p5);
		
		btTotaliza = new Button("Totaliza");
		lTotalFeminino = new Label("Total Feminino:");
		p5.add(btTotaliza);
		p5.add(lTotalFeminino);
		
		Panel p6 = new Panel();
		p6.setLayout(new FlowLayout(FlowLayout.RIGHT));
		this.add(p6);
		
		lTotalMasculino = new Label("Total Masculino:");
		p6.add(lTotalMasculino);
		
		Panel p7 = new Panel();
		p7.setLayout(new FlowLayout(FlowLayout.LEFT));
		this.add(p7);
		
		lStatus = new Label("Status");
		p7.add(lStatus);
		
		msg = new TextField(10);
		Button btOk = new Button("Ok");
		Button btStop = new Button("Stop");
		btOk.addMouseListener(this);
		btStop.addMouseListener(this);
		
		addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent evt) {
				System.exit(0);
			}
		});
		
		pack();
		
	}

	public void mousePressed(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	public void mouseCliked(MouseEvent e){
		if (e.getSource == btOk)
			msg.setText("OK foi clicado");
		
		if (e.getSource == btStop)
			msg.setText("Stop foi clicado");
	}
	
	public static void main (String args[]) {
		Janela j = new Janela();
		j.setVisible(true);
	}
	
}

Acontece que está dentro das normas de implementação de um Listener.
No exercício é proibido usar Classes Adaptadoras.

O estranho é que, se os métodos de Listener estiverem numa classe a parte que implementa a MouseListener tudo funciona.
Tendo uma classe a parte o trecho:

btOk.addMouseListener(this);

Fica como:

btOk.addMouseListener(instanciaDaClasseAParte);

Teoricamente a classe no corpo deste tópico é para compilar?

3 Respostas

Paulo_Dias

eae, tudo ok?

bom, essas são algumas coisas que percebi no seu código:

1 - estão faltando os ( ) nos métodos getSource ( deveria ser “e.getSource()” )

2 - Button btOk e btStop são declarados no construtor, os outros métodos não tem acesso a eles ( deveriam ser atributos da classe )

3 - esta faltando um “c” no seu método [color=red]“mouseCliked”[/color]

ViniGodoy

Não use AWT.

wID

Muito Obrigado!
Eram esses erros no código não-enxergáveis por mim que estavam matando, rs.

Então, é que é obrigatório uso do AWT, o próximo já é em Swing com Classes Adapters, aí melhora bastante.

Obrigado!

Criado 15 de fevereiro de 2011
Ultima resposta 15 de fev. de 2011
Respostas 3
Participantes 3