/** * DefaultHyperlinkHandler.java * (c) Peter Bielik and Radek Burget, 2011-2012 * * SwingBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * SwingBox is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with SwingBox. If not, see <http://www.gnu.org/licenses/>. * */ package org.fit.cssbox.swingbox.util; import java.awt.Cursor; import java.io.IOException; import javax.swing.JEditorPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; /** * Customizable implementation of HyperlinListener. This default implementation only changes * the cursor shape when a link is entered or exited. * * @author Peter Bielik */ public class DefaultHyperlinkHandler implements HyperlinkListener { private static final Cursor HandCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); private static final Cursor DefaultCursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); @Override public void hyperlinkUpdate(HyperlinkEvent evt) { JEditorPane pane = (JEditorPane) evt.getSource(); if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { setCursor(pane, DefaultCursor); loadPage(pane, evt); } else if (evt.getEventType() == HyperlinkEvent.EventType.ENTERED) { regionEntered(pane, evt); } else if (evt.getEventType() == HyperlinkEvent.EventType.EXITED) { regionExited(pane, evt); } } /** * Loads given page as HyperlinkEvent. * * @param pane * the pane * @param evt * the event */ protected void loadPage(JEditorPane pane, HyperlinkEvent evt) { // if some security, or other interaction is needed, override this // method try { pane.setPage(evt.getURL()); } catch (IOException e) { System.err.println(e.getLocalizedMessage()); } } /** * Region entered. Called when mouse pointer is over some link * * @param pane * the pane * @param evt * the event */ protected void regionEntered(JEditorPane pane, HyperlinkEvent evt) { setCursor(pane, HandCursor); } /** * Region exited. Called when mouse pointer leaves a link * * @param pane * the pane * @param evt * the event */ protected void regionExited(JEditorPane pane, HyperlinkEvent evt) { setCursor(pane, DefaultCursor); } /** * Sets the mouse cursor cursor. * * @param editor * the editor * @param cursor * the cursor */ protected void setCursor(JEditorPane editor, Cursor cursor) { if (editor.getCursor() != cursor) { editor.setCursor(cursor); } } }