[RESOLVIDO] JLabel clicável

5 respostas
V

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.

5 Respostas

T

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

B

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.

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

B

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?

M
Juntando oq td mundo falo seria +ou- assim:
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();
	}

}

espero ter ajudado :wink:

V

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.

Criado 26 de março de 2009
Ultima resposta 27 de mar. de 2009
Respostas 5
Participantes 4