Problemas Com HandlerClass Trabalhando com Eventos de Mause

5 respostas
J
Belza pessoal, estou trabalhando para fazer um programinha, onde ele identifique as funções do mause. Porem estou com um probleminha, ele sempre aposta um erro para a linha 19 e 23. As linhas do HandlerClass.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Gui extends JFrame{
	private JPanel mausepanel;
	private JLabel statusbar;
	
	public  Gui(){
		super("Titulo");
		
		mausepanel = new JPanel();
		mausepanel.setBackground(Color.WHITE);
		add(mausepanel, BorderLayout.CENTER);
		
		statusbar = new JLabel("default");
		add(statusbar, BorderLayout.CENTER);
		
		Handlerclass handler = new Handlerclass();  //erro?
		mausepanel.addMouseListener(handler);
		mausepanel.addMotionListener(handler);
		
			private class Handlerclass implements MouseListener , MouseMotionListener{
							public void mouseClicked(MouseEvent event){
								statusbar.setText(String.format("Clicado na %d %d",event.getX(),event.getY()));
							}public void mousePressed(MouseEvent event){
								statusbar.setText("Mause apertado");						
							}public void mouseReleased(MouseEvent event){
								statusbar.setText("Mause solto");						
							}public void mouseEntered(MouseEvent event){
								statusbar.setText("Mause Entrou na Tela");	
								mausepanel.setBackground(Color.RED);
							}public void mouseExited(MouseEvent event){
								statusbar.setText("Mause saiu da Tela");						
								mausepanel.setBackground(Color.WHITE);
							}public void mouseDragged(MouseEvent event){
								statusbar.setText("Mause Largado");					
							}
							
				}
			
			
			
			}
	}
esse metodo é executado em outra classe
import javax.swing.JFrame;

public class Apicativo {
	public static void main(String[] args) {
		
		Gui go = new Gui();
		go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		go.setSize(300,200);
		go.setVisible(true);

	}

}

Obrigado pela atenção pessoal!

5 Respostas

lucas_guj

Qual o erro que está apontado?

lucas_guj

Vê se agora funciona:

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

public class Gui extends JFrame{  
private JPanel mausepanel;  
private JLabel statusbar;  
  
	public  Gui(){  
		super("Titulo");  
		  
		mausepanel = new JPanel();  
		mausepanel.setBackground(Color.WHITE);  
		add(mausepanel, BorderLayout.CENTER);  
		  
		statusbar = new JLabel("default");  
		add(statusbar, BorderLayout.SOUTH); 
		   
		mausepanel.addMouseListener(new Handlerclass() );
		mausepanel.addMouseMotionListener(new Handlerclass2() );
	}  
	
	private class Handlerclass extends MouseAdapter{  
		public void mouseClicked(MouseEvent event){  
			statusbar.setText(String.format("Clicado na %d %d",event.getX(),event.getY()));  
		}
		public void mousePressed(MouseEvent event){  
			statusbar.setText("Mause apertado");                          
		}
		public void mouseReleased(MouseEvent event){  
			statusbar.setText("Mause solto");                         
		}
		public void mouseEntered(MouseEvent event){  
			statusbar.setText("Mause Entrou na Tela");    
			mausepanel.setBackground(Color.RED);  
		}
		public void mouseExited(MouseEvent event){  
			statusbar.setText("Mause saiu da Tela");                          
			mausepanel.setBackground(Color.WHITE);  
		}
		public void mouseDragged(MouseEvent event){  
			statusbar.setText("Mause Largado");                   
		}		  
	}
	
	private class Handlerclass2 extends MouseMotionAdapter{  
		public void mouseDragged(MouseEvent event){  
			statusbar.setText("Mause Largado");                   
		}		  
	}
}

E a outra classe não muda nada, eu só acrescentei um “l” ( Letra L ) no nome da outra classe porque está : apicativo, ai ficou aplicativo.

lucas_guj

Se não souber o que eu fiz, me pergunte que eu responderei.

J

Opa… bahhhh mtu obrigado… show vÊ esse programa funcionando

o erro ocorria exatamente na linha 19
Percebi q vc não usou essa intrução

Meu:

Handlerclass handler = new Handlerclass();  //erro?  
        mausepanel.addMouseListener(handler);  
        mausepanel.addMotionListener(handler)

Seu:

mausepanel.addMouseListener(new Handlerclass() );  
        mausepanel.addMouseMotionListener(new Handlerclass2() );  
    }

Só não entendi o motivo do Handlerclass2 ?

Mas obrigado de novo, já me ajudou e muito!

lucas_guj

Bom, vamos lá, os erros que percebi que você estava cometendo.:

1° - Declarando a classe dentro do construtor
2° - Você estava adicionando o JLabel na mesma posição do mausepanel. Veja a diferença do seu código para o meu:

add(mausepanel, BorderLayout.CENTER);  // linha 14 no programa
add(statusbar, BorderLayout.CENTER);      // linha 17 no programa

E agora o meu código:
add(mausepanel, BorderLayout.CENTER); // linha 14 no programa add(statusbar, BorderLayout.SOUTH); // linha 17 no programa

3° - Na classe Ouvinte você estava implementando duas interfaces, logo você tinha que implementar TODOS OS MÉTODOS DA INTERFACES, e você não estava implementando o metodo: “mouseMoved” de MouseMotionListener, logo dava erro.

4° - Quando você faz isso:

extends MouseAdapter

Você está estendendo a classe Adaptadora MouseAdapter, que é uma classe Abstrata que implementa os metodos da interface, sendo assim você NÃO é necessariamente obrigado a implementar TODOS os métodos da MouseAdapter. Entendeu?

5° - E como você só pode estender uma classe na declaraçao, então eu criei outra classe para estender a classe Adaptadora MouseMotionAdapter, por isso o motivo do Handlerclass2

Criado 14 de fevereiro de 2012
Ultima resposta 11 de abr. de 2012
Respostas 5
Participantes 2