[RESOLVIDO] JLabel clicável

Oi pessoal.

Tenho um problema aqui, que preciso criar um tipo de JLabel que dispare um ActionListener quando for clicado. Ou seja, algo que é apresentado como um label, mas se comporta como um botão.

Tentei implementar isso de várias formas diferentes e nenhuma delas deu certo. Alguém aí tem um código legal que faça isso?

Abraços.

Você queria uma coisa como se fosse um link html? Acho que você pode usar um JButton e remover a borda dele, por exemplo.

[quote=victorwss]Oi pessoal.

Tenho um problema aqui, que preciso criar um tipo de JLabel que dispare um ActionListener quando for clicado. Ou seja, algo que é apresentado como um label, mas se comporta como um botão.

Tentei implementar isso de várias formas diferentes e nenhuma delas deu certo. Alguém aí tem um código legal que faça isso?

Abraços.[/quote]

Que tal adicionar um MouseListener, e trata o evento no mouseClicked. e para as teclas, KeyListener

Ha, só complementando, se vc quizer dar uma melhorada… vc pode aproveitar o MouseListener e tratar no evento de mouseEntered e mouseExited para quando o mouse passar por cima trocar a cor do foreground para azul… e quando o mouse sair dele coloca preto… dae fica com o efeito de link… saca?

Juntando oq td mundo falo seria +ou- assim:

[code]import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class exemplo extends JFrame implements MouseListener{

static final JLabel link = new JLabel("www.guj.com.br");//seu label
public exemplo(){
	link.addMouseListener(this);//esta adicionando os eventos do mouse ao label
	setLayout(new FlowLayout());  
	add(link);
	addWindowListener(new WindowAdapter(){
		public void windowClosing(WindowEvent e){
			System.exit(0);
		}			
	});
	setLocation(700,500);
	setSize(200,70);
	setVisible(true);
}
public void mouseClicked(MouseEvent arg0) {
	link.setText("Você clicou no label");
}// evento q sera executado caso o mouse click no label

public void mouseEntered(MouseEvent arg0) {
	link.setForeground(Color.blue);
}// evento q sera executado caso o mouse entre no label

public void mouseExited(MouseEvent arg0) {
	link.setText("www.guj.com.br");
	link.setForeground(Color.black);
}// evento q sera executado caso o mouse saia do label

public void mousePressed(MouseEvent arg0) {
	link.setText("Você esta pressionando no label");
}// evento q sera executado caso o mouse seja pressionado no label

public void mouseReleased(MouseEvent arg0) {
	link.setText("Você largou no label");
}// evento q sera executado caso o mouse seja largado no label

public static void main(String[] args){
	new exemplo();
}

}[/code]

espero ter ajudado :wink:

1 curtida

Achei este tópico no javarach e conseguir resolver. A solução é a classe javax.swing.JEditorPane. Nem sabia que ela existia, mas é uma classe bem interessante.