Ex: Para saber o objeto que foi clicado em um evento ActionListener uso o getSource(),
o que eu uso para identificar um objeto clicado em um evento MouseListener?
obrigado.
Ex: Para saber o objeto que foi clicado em um evento ActionListener uso o getSource(),
o que eu uso para identificar um objeto clicado em um evento MouseListener?
obrigado.
Você usa o getSource(). E num KeyTyped? O getSource() também.
vo ti dar em exemplo
se eu faço assim dá certo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class UsodeIcone extends JFrame {
JLabel Sair;
public UsodeIcone(){
super ("Uso de Icone como Botao");
Container tela = getContentPane();
setLayout(null);
setSize(140, 160);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Sair = new JLabel();
Sair.setIcon(new ImageIcon(getClass().getResource("teste.png")));
Sair.setBounds(30, 30, 64, 64);
tela.add(Sair);
Sair.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
System.exit(0);
}} );
}
public static void main(String args[]) {
UsodeIcone UI = new UsodeIcone();
UI.setVisible(true);
}
}
mas se eu tento assim nao dá, qual meu erro?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class UsodeIcone extends JFrame implements MouseListener {
JLabel Sair;
public UsodeIcone(){
super ("Uso de Icone como Botao");
Container tela = getContentPane();
setLayout(null);
setSize(140, 160);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Sair = new JLabel();
Sair.setIcon(new ImageIcon(getClass().getResource("teste.png")));
Sair.setBounds(30, 30, 64, 64);
tela.add(Sair);
}
public void mouseClicked(MouseEvent evt) {
if (evt.getSource() == Sair)
System.exit(0);
}
public static void main(String args[]) {
UsodeIcone UI = new UsodeIcone();
UI.setVisible(true);
}
}
obrigado.
No segundo caso você não deu addMouseListener.
Lá no construtor faça:
humm, verdade
tinha esquecido de add o ouvinte. :?
mas mesmo assim continuou dando erro
ai tive que add os outros 4 métodos além do mouseClicked(),
pq isso?
brigadão aee :lol:
Pq a interface MouseListener tem 4 métodos. E você é obrigado a implementar todos.
Note que no outro exemplo você estendeu MouseAdapter. Mouse adapter é uma classe assim:
public abstract class MouseAdapter implements MouseListener {
void mouseClicked(MouseEvent e) {}
void mouseEntered(MouseEvent e) {}
void mouseExited(MouseEvent e) {}
void mousePressed(MouseEvent e) {}
void mouseReleased(MouseEvent e) {}
}
Ou seja, ela implementa os métodos todos em branco. Aí, quem estende não é obrigado a fazer isso, como vc fez…
(na verdade, ela é um pouco diferente, pq também implementa mouseWheelListener e mouseMotionListener, mas por isso só terá mais métodos em branco).
Só um comentário. A forma que vc fez por primeiro é mais elegante que a que você fez por segundo. Implementar interfaces diretamente em suas classes expõe vários métodos como públicos, e eles não deveriam ser assim.
Por isso, eu geralmente prefiro implementar interfaces como essas usando classes privadas, como vc fez no primeiro caso.
massa
vlw mesmo ae cara

e outra coisa
pra que que serrve o getClass e o getResource ?
O getClass() retorna um objeto do tipo Class. Esse objeto descreve uma classe, no caso, a UsodeIcone.
Você poderia perguntar para esse objeto, que métodos essa classe tem, e até invoca-los.
Dentre os métodos do objeto class, encontra-se o método getResource(). Ele retorna quem foi o ResourceManager responsável por carregar essa classe. Quando uma classe Java é criada, o Java cria um gerente de recursos para carregar os arquivos da classe. Esse gerente pode ser diferente caso a classe esteja num .jar ou no sistema de arquivos, por exemplo.
O gerente de recursos é capaz de carregar um arquivo qualquer. Ele se baseia no classpath de sua aplicação, ou seja, a raiz do gerente de recursos será igual a raiz do seu classpath. Portanto, se você pedir um ícone “/projeto/imagens/teste.jpg”, você terá que ter um pacote no seu projeto com o nome projeto.imagens. E é nesse pacote que você terá que ter o arquivo teste.png.
A vantagem de usar o getResource() no lugar do File, é que o File efetivamente representa um arquivo no sistema de arquivos. Assim, se sua aplicação mais tarde for empacotada num .jar, o file continuará enxergando o sistema de arquivos, enquanto o getResource() irá procurar pelos arquivos dentro do .jar.
show de bola ;D