View Javadoc

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  }