By Alvin Alexander. Last updated: June 4, 2016
This Java class still needs some work, but it's my first attempt at creating a Java Swing component that simulates a hyperlink. Basically, if you use this label (a JHyperlinkLabel to be precise) instead of a JLabel you should see hyperlink behavior on your Swing labels (JLabel).
Again, this is a work in progress, so don't get too excited, but I think it has promise. The nice thing is that users can click the label to trigger an event, so it works a lot like hyperlinks on the web.
Java hyperlink (JLabel hyperlink) source code
Without any further ado, here is the code:
package com.devdaily.gui.utils;
import java.awt.Cursor;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
public class JHyperlinkLabel extends JLabel {
private String url;
final Color COLOR_NORMAL = Color.BLUE;
final Color COLOR_HOVER = Color.RED;
final Color COLOR_ACTIVE = COLOR_NORMAL;
final Color COLOR_BG_NORMAL = Color.LIGHT_GRAY;
final Color COLOR_BG_ACTIVE = Color.LIGHT_GRAY;
Color mouseOutDefault;
public JHyperlinkLabel(String text, String url) {
super(text);
this.url = url;
}
public JHyperlinkLabel() {
addMouseListener();
setForeground(COLOR_NORMAL);
setBackground(COLOR_BG_NORMAL);
mouseOutDefault = COLOR_NORMAL;
this.setSize((int)this.getPreferredSize().getWidth(),(int)this.getPreferredSize().getHeight());
this.setOpaque(true);
}
public void setUrl(String url) {
this.url = url;
setText("" + getText() + "");
}
public void setText(String text) {
super.setText(text);
}
public void paint(Graphics g) {
super.paint(g);
g.drawLine(2,
getHeight()-1,
(int)getPreferredSize().getWidth()-2,
getHeight()-1);
}
public void addMouseListener() {
addMouseListener( new MouseListener() {
public void mouseClicked(MouseEvent me) {
setForeground(COLOR_ACTIVE);
mouseOutDefault = COLOR_ACTIVE;
// do something here
}
public void mouseReleased(MouseEvent me) {
}
public void mousePressed(MouseEvent me) {
mouseOutDefault = COLOR_ACTIVE;
}
public void mouseEntered(MouseEvent me) {
setForeground(COLOR_HOVER);
setBackground(COLOR_BG_ACTIVE);
Cursor cursor = getCursor();
setCursor(cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
public void mouseExited(MouseEvent me) {
setForeground(mouseOutDefault);
setBackground(COLOR_BG_NORMAL);
Cursor cursor = getCursor();
setCursor(cursor.getDefaultCursor());
}
});
}
}
I need to note that I got some of this code from another site on the Internet ... I'm sorry, but I can't remember where. I've changed it a fair amount since then, but I'd still like to give the original author some credit.

