01: package org.zilonis.tool.ui;
02:
03: import java.awt.Cursor;
04: import java.awt.Rectangle;
05: import java.awt.event.MouseEvent;
06: import java.awt.event.MouseListener;
07: import java.awt.event.MouseMotionListener;
08: import javax.swing.JComponent;
09:
10: final class HyperlinkHandler implements MouseListener,
11: MouseMotionListener {
12: private static final HyperlinkHandler INSTANCE = new HyperlinkHandler();
13: private static final String CURSOR_BOUNDS = "cursor_bounds";
14:
15: static void add(JComponent component, Rectangle bounds) {
16: component.addMouseListener(INSTANCE);
17: component.addMouseMotionListener(INSTANCE);
18: component.putClientProperty(CURSOR_BOUNDS, bounds);
19: }
20:
21: static void remove(JComponent component) {
22: component.removeMouseListener(INSTANCE);
23: component.removeMouseMotionListener(INSTANCE);
24: component.putClientProperty(CURSOR_BOUNDS, null);
25:
26: setDefaultCursor(component);
27: }
28:
29: private static void setDefaultCursor(JComponent component) {
30: component.setCursor(Cursor
31: .getPredefinedCursor(Cursor.DEFAULT_CURSOR));
32: }
33:
34: private static void setHyperlinkCursor(JComponent c) {
35: c.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
36: }
37:
38: public void mouseClicked(MouseEvent e) {
39: }
40:
41: public void mousePressed(MouseEvent e) {
42: }
43:
44: public void mouseReleased(MouseEvent e) {
45: }
46:
47: public void mouseEntered(MouseEvent e) {
48: JComponent c = (JComponent) e.getSource();
49: Rectangle r = (Rectangle) c.getClientProperty(CURSOR_BOUNDS);
50:
51: if (r == null || r.contains(e.getPoint())) {
52: setHyperlinkCursor(c);
53: }
54: }
55:
56: public void mouseExited(MouseEvent e) {
57: setDefaultCursor((JComponent) e.getSource());
58: }
59:
60: public void mouseDragged(MouseEvent e) {
61: }
62:
63: public void mouseMoved(MouseEvent e) {
64: JComponent c = (JComponent) e.getSource();
65: Rectangle r = (Rectangle) c.getClientProperty(CURSOR_BOUNDS);
66:
67: if (r != null) {
68: if (r.contains(e.getPoint())) {
69: setHyperlinkCursor(c);
70: } else {
71: setDefaultCursor(c);
72: }
73: }
74: }
75: }
|