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
[code]
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);
}
}[/code]
Obrigado pela atenção pessoal!
Qual o erro que está apontado?
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.
Se não souber o que eu fiz, me pergunte que eu responderei.
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!
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