FileDocCategorySizeDatePackage
BasicArrowButton.javaAPI DocJava SE 5 API6289Fri Aug 26 14:58:02 BST 2005javax.swing.plaf.basic

BasicArrowButton

public class BasicArrowButton extends JButton implements SwingConstants
JButton object that draws a scaled Arrow in one of the cardinal directions.

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see {@link java.beans.XMLEncoder}.

version
1.26 12/19/03
author
David Kloba

Fields Summary
protected int
direction
private Color
shadow
private Color
darkShadow
private Color
highlight
Constructors Summary
public BasicArrowButton(int direction, Color background, Color shadow, Color darkShadow, Color highlight)

	    super();
	    setRequestFocusEnabled(false);
            setDirection(direction);
            setBackground(background);
	    this.shadow = shadow;
	    this.darkShadow = darkShadow;
	    this.highlight = highlight;
	
public BasicArrowButton(int direction)

	    this(direction, UIManager.getColor("control"), UIManager.getColor("controlShadow"),
		 UIManager.getColor("controlDkShadow"), UIManager.getColor("controlLtHighlight"));
        
Methods Summary
public intgetDirection()

 return direction; 
public java.awt.DimensiongetMaximumSize()

            return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
        
public java.awt.DimensiongetMinimumSize()

            return new Dimension(5, 5);
        
public java.awt.DimensiongetPreferredSize()

            return new Dimension(16, 16);
        
public booleanisFocusTraversable()

	  return false;
	
public voidpaint(java.awt.Graphics g)

	    Color origColor;
	    boolean isPressed, isEnabled;
	    int w, h, size;

            w = getSize().width;
            h = getSize().height;
	    origColor = g.getColor();
	    isPressed = getModel().isPressed();
	    isEnabled = isEnabled();

            g.setColor(getBackground());
            g.fillRect(1, 1, w-2, h-2);

            /// Draw the proper Border
	    if (getBorder() != null && !(getBorder() instanceof UIResource)) {
		paintBorder(g);
	    } else if (isPressed) {
                g.setColor(shadow);
                g.drawRect(0, 0, w-1, h-1);
            } else {
                // Using the background color set above
                g.drawLine(0, 0, 0, h-1);
                g.drawLine(1, 0, w-2, 0);

                g.setColor(highlight);    // inner 3D border
                g.drawLine(1, 1, 1, h-3);
                g.drawLine(2, 1, w-3, 1);

                g.setColor(shadow);       // inner 3D border
                g.drawLine(1, h-2, w-2, h-2);
                g.drawLine(w-2, 1, w-2, h-3);

                g.setColor(darkShadow);     // black drop shadow  __|
                g.drawLine(0, h-1, w-1, h-1);
                g.drawLine(w-1, h-1, w-1, 0);
            }

            // If there's no room to draw arrow, bail
            if(h < 5 || w < 5)      {
                g.setColor(origColor);
                return;
            }

            if (isPressed) {
                g.translate(1, 1);
            }

            // Draw the arrow
            size = Math.min((h - 4) / 3, (w - 4) / 3);
            size = Math.max(size, 2);
	    paintTriangle(g, (w - size) / 2, (h - size) / 2,
				size, direction, isEnabled);

            // Reset the Graphics back to it's original settings
            if (isPressed) {
                g.translate(-1, -1);
	    }
	    g.setColor(origColor);

        
public voidpaintTriangle(java.awt.Graphics g, int x, int y, int size, int direction, boolean isEnabled)

	    Color oldColor = g.getColor();
	    int mid, i, j;

	    j = 0;
            size = Math.max(size, 2);
	    mid = (size / 2) - 1;
	
	    g.translate(x, y);
	    if(isEnabled)
		g.setColor(darkShadow);
	    else
		g.setColor(shadow);

            switch(direction)       {
            case NORTH:
                for(i = 0; i < size; i++)      {
                    g.drawLine(mid-i, i, mid+i, i);
                }
                if(!isEnabled)  {
                    g.setColor(highlight);
                    g.drawLine(mid-i+2, i, mid+i, i);
                }
                break;
            case SOUTH:
                if(!isEnabled)  {
                    g.translate(1, 1);
                    g.setColor(highlight);
                    for(i = size-1; i >= 0; i--)   {
                        g.drawLine(mid-i, j, mid+i, j);
                        j++;
                    }
		    g.translate(-1, -1);
		    g.setColor(shadow);
		}
		
		j = 0;
                for(i = size-1; i >= 0; i--)   {
                    g.drawLine(mid-i, j, mid+i, j);
                    j++;
                }
                break;
            case WEST:
                for(i = 0; i < size; i++)      {
                    g.drawLine(i, mid-i, i, mid+i);
                }
                if(!isEnabled)  {
                    g.setColor(highlight);
                    g.drawLine(i, mid-i+2, i, mid+i);
                }
                break;
            case EAST:
                if(!isEnabled)  {
                    g.translate(1, 1);
                    g.setColor(highlight);
                    for(i = size-1; i >= 0; i--)   {
                        g.drawLine(j, mid-i, j, mid+i);
                        j++;
                    }
		    g.translate(-1, -1);
		    g.setColor(shadow);
                }

		j = 0;
                for(i = size-1; i >= 0; i--)   {
                    g.drawLine(j, mid-i, j, mid+i);
                    j++;
                }
		break;
            }
	    g.translate(-x, -y);	
	    g.setColor(oldColor);
	
public voidsetDirection(int dir)

 direction = dir;