FileDocCategorySizeDatePackage
HrefButtonArea.javaAPI DocSun JDK 1.4.2 Example4915Thu May 12 00:35:29 BST 2005None

HrefButtonArea

public class HrefButtonArea extends ImageMapArea
An improved "Fetch a URL" ImageArea class. This class extends the basic ImageArea Class to fetch a URL when the user clicks in the area. In addition, special custom highlights are used to make the area look and feel like a 3-D button.
author
Jim Graham
version
1.12, 01/23/03

Fields Summary
URL
anchor
The URL to be fetched when the user clicks on this area.
Image
upImage
The highlight image for when the button is "UP".
Image
downImage
The highlight image for when the button is "DOWN".
boolean
pressed
This flag indicates if the "button" is currently pressed.
int
border
The border size for the 3-D effect.
Constructors Summary
Methods Summary
public voidenter()

	showStatus((anchor != null)
		   ? "Go To " + anchor.toExternalForm()
		   : null);
	repaint();
    
public voidexit()

	showStatus(null);
	repaint();
    
public voidhandleArg(java.lang.String arg)
The argument string is the URL to be fetched. This method also constructs the various highlight images needed to achieve the 3-D effect.


                                
        
	try {
	    anchor = new URL(parent.getDocumentBase(), arg);
	} catch (MalformedURLException e) {
	    anchor = null;
	}
	if (border * 2 > W || border * 2 > H) {
	    border = Math.min(W, H) / 2;
	}
    
public voidhighlight(java.awt.Graphics g)
The status message area is updated to show the destination URL. The graphical highlight is achieved using the ButtonFilter.

	if (entered) {
	    g.drawImage(pressed ? downImage : upImage, X, Y, this);
	}
    
public booleanimageUpdate(java.awt.Image img, int infoflags, int x, int y, int width, int height)

	if (img == (pressed ? downImage : upImage)) {
	    return parent.imageUpdate(img, infoflags, x + X, y + Y,
				      width, height);
	} else {
	    return (img == downImage || img == upImage);
	}
    
public booleanisTerminal()
The isTerminal method indicates whether events should propagate to the areas underlying this one.

	return true;
    
public booleanlift(int x, int y)
The new URL is fetched when the user releases the mouse button only if they are still in the area.

	pressed = false;
	repaint();
	if (inside(x, y) && anchor != null) {
	    showDocument(anchor);
	}
	return true;
    
public voidmakeImages()

	upImage = parent.getHighlight(X, Y, W, H,
				      new ButtonFilter(false,
						       parent.hlpercent,
						       border, W, H));
	downImage = parent.getHighlight(X, Y, W, H,
					new ButtonFilter(true,
							 parent.hlpercent,
							 border, W, H));
    
public booleanpress()
Since the highlight changes when the button is pressed, we need to record the "pressed" state and induce a repaint.

	pressed = true;
	repaint();
	return true;