package info.ata4.util.gui.components; import info.ata4.log.LogUtils; import java.awt.Cursor; import java.awt.Desktop; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JLabel; public class URILabel extends JLabel { private static final Logger L = LogUtils.getLogger(); private URI uri; public URILabel() { super(); setCursor(new Cursor(Cursor.HAND_CURSOR)); addMouseListener(new URLOpenAdapter()); } public void setURI(String text, URI uri) { this.uri = uri; super.setText("<html><body><a href=\"" + uri + "\">" + text + "</a></body></html>"); } public void setURI(String text, String uriString) { try { setURI(text, new URI(uriString)); } catch (URISyntaxException ex) { L.log(Level.WARNING, "Invalid URI format", ex); setText(text); } } private class URLOpenAdapter extends MouseAdapter { @Override public void mouseClicked(MouseEvent e) { if (Desktop.isDesktopSupported()) { try { Desktop.getDesktop().browse(uri); } catch (IOException ex) { L.log(Level.WARNING, "Can't browse URI", ex); } } } } }