1 package org.glassbox.gui;
2
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6
7 /***
8 A button which looks like a hyperlink.
9 */
10 public class LinkButton extends JButton {
11 private MouseListener MOUSE = new MouseAdapter() {
12 public void mousePressed(MouseEvent e) {
13 setForeground(_pressedcolor);
14 }
15
16 public void mouseReleased(MouseEvent e) {
17 setForeground(_actionperformed?_visitedcolor:_activecolor);
18 }
19
20 public void mouseEntered(MouseEvent e) {
21 setForeground(_actionperformed?_visitedcolor:_overcolor);
22 }
23
24 public void mouseExited(MouseEvent e) {
25 setForeground(_actionperformed?_visitedcolor:_activecolor);
26 }
27 };
28
29 private MouseMotionListener MOTION = new MouseMotionAdapter() {
30 public void mouseMoved(MouseEvent e) {
31 setForeground(_actionperformed?_visitedcolor:_overcolor);
32 }
33 };
34
35 protected Color _activecolor = Color.BLUE;
36 protected Color _visitedcolor = new Color(64, 64, 128);
37 protected Color _overcolor = new Color(128, 128, 255);
38 protected Color _pressedcolor = Color.RED;
39 protected boolean _actionperformed;
40
41 public LinkButton(String text) {
42 super(text);
43 initiate();
44 }
45
46 public LinkButton(String text, Icon icon) {
47 super(text, icon);
48 initiate();
49 }
50
51 public LinkButton(String text, Icon icon, Color active, Color visited, Color over, Color pressed) {
52 super(text, icon);
53 _activecolor = active;
54 _visitedcolor = visited;
55 _overcolor = over;
56 _pressedcolor = pressed;
57 initiate();
58 }
59
60 protected void initiate() {
61 _actionperformed = false;
62 setBorderPainted(false);
63 setContentAreaFilled(false);
64 setForeground(_activecolor);
65 setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
66 addMouseListener(MOUSE);
67 addMouseMotionListener(MOTION);
68 }
69
70 protected void fireActionPerformed(ActionEvent e) {
71 _actionperformed = true;
72 setForeground(_visitedcolor);
73 super.fireActionPerformed(e);
74 }
75 }