Try using JToggleButton . There is no need for a MouseListener and responds to keyboard input.

import javax.swing.*; import javax.imageio.ImageIO; import java.net.URL; import java.awt.Image; class ToggleImage { public static void main(String[] args) throws Exception { URL url1 = new URL("http://pscode.org/media/stromlo1.jpg"); URL url2 = new URL("http://pscode.org/media/stromlo2.jpg"); final Image image1 = ImageIO.read(url1); final Image image2 = ImageIO.read(url2); SwingUtilities.invokeLater(new Runnable() { public void run() { JToggleButton button = new JToggleButton(); button.setIcon(new ImageIcon(image1)); button.setSelectedIcon(new ImageIcon(image2)); button.setBorderPainted(false); button.setContentAreaFilled(false); JOptionPane.showMessageDialog(null, button); } }); } }
Old code - before I realized that we are talking about images
I want to make sure that if I click on JLabel
What about people who are βchallengingβ? Use a JTextField instead. Paste any link and press Enter to activate.

import java.awt.Desktop; import java.awt.Color; import java.awt.Cursor; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.*; import javax.swing.JTextField; import javax.swing.JPanel; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.border.MatteBorder; import javax.swing.border.Border; import java.net.URI; import java.io.File; public class LinkLabel // we extend a JTextField, to get a focusable component extends JTextField implements MouseListener, FocusListener, ActionListener { private URI target; public Color standardColor = new Color(0,0,255); public Color hoverColor = new Color(255,0,0); public Color activeColor = new Color(128,0,128); public Color transparent = new Color(0,0,0,0); public boolean underlineVisible = true; private Border activeBorder; private Border hoverBorder; private Border standardBorder; public LinkLabel(URI target) { this( target, target.toString() ); } public LinkLabel(URI target, String text) { super(text); this.target = target; } public void setActiveColor(Color active) { activeColor = active; } public void setHoverColor(Color hover) { hoverColor = hover; } public void setStandardColor(Color standard) { standardColor = standard; } public void setUnderlineVisible(boolean underlineVisible) { this.underlineVisible = underlineVisible; } public void init() { this.addMouseListener(this); this.addFocusListener(this); this.addActionListener(this); setToolTipText(target.toString()); if (underlineVisible) { activeBorder = new MatteBorder(0,0,1,0,activeColor); hoverBorder = new MatteBorder(0,0,1,0,hoverColor); standardBorder = new MatteBorder(0,0,1,0,transparent); } else { activeBorder = new MatteBorder(0,0,0,0,activeColor); hoverBorder = new MatteBorder(0,0,0,0,hoverColor); standardBorder = new MatteBorder(0,0,0,0,transparent); }