Source for org.jfree.ui.ArrowPanel

   1: /* ========================================================================
   2:  * JCommon : a free general purpose class library for the Java(tm) platform
   3:  * ========================================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  * 
   7:  * Project Info:  http://www.jfree.org/jcommon/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  * 
  27:  * ---------------
  28:  * ArrowPanel.java
  29:  * ---------------
  30:  * (C) Copyright 2002-2004, by Object Refinery Limited.
  31:  *
  32:  * Original Author:  David Gilbert (for Object Refinery Limited);
  33:  * Contributor(s):   -;
  34:  *
  35:  * $Id: ArrowPanel.java,v 1.6 2007/11/02 17:50:36 taqua Exp $
  36:  *
  37:  * Changes
  38:  * -------
  39:  * 25-Sep-2002 : Version 1 (DG);
  40:  * 13-Oct-2002 : Added Javadocs (DG);
  41:  *
  42:  */
  43: 
  44: package org.jfree.ui;
  45: 
  46: import java.awt.Dimension;
  47: import java.awt.Graphics;
  48: import java.awt.Graphics2D;
  49: import java.awt.Insets;
  50: import java.awt.Polygon;
  51: import java.awt.Shape;
  52: import java.awt.geom.Rectangle2D;
  53: import javax.swing.JPanel;
  54: 
  55: /**
  56:  * A basic panel that displays a small up or down arrow.
  57:  *
  58:  * @author David Gilbert
  59:  */
  60: public class ArrowPanel extends JPanel {
  61: 
  62:     /** A constant for the up arrow. */
  63:     public static final int UP = 0;
  64: 
  65:     /** A constant for the down arrow. */
  66:     public static final int DOWN = 1;
  67: 
  68:     /** The arrow type. */
  69:     private int type = UP;
  70: 
  71:     /** The available area. */
  72:     private Rectangle2D available = new Rectangle2D.Float();
  73: 
  74:     /**
  75:      * Creates a new arrow panel.
  76:      *
  77:      * @param type  the arrow type.
  78:      */
  79:     public ArrowPanel(final int type) {
  80:         this.type = type;
  81:         setPreferredSize(new Dimension(14, 9));
  82:     }
  83: 
  84:     /**
  85:      * Paints the arrow panel.
  86:      *
  87:      * @param g  the graphics device for drawing on.
  88:      */
  89:     public void paintComponent(final Graphics g) {
  90: 
  91:         super.paintComponent(g);
  92:         final Graphics2D g2 = (Graphics2D) g;
  93: 
  94:         // first determine the size of the drawing area...
  95:         final Dimension size = getSize();
  96:         final Insets insets = getInsets();
  97:         this.available.setRect(insets.left, insets.top,
  98:                                size.getWidth() - insets.left - insets.right,
  99:                                size.getHeight() - insets.top - insets.bottom);
 100:         g2.translate(insets.left, insets.top);
 101:         g2.fill(getArrow(this.type));
 102: 
 103:     }
 104: 
 105:     /**
 106:      * Returns a shape for the arrow.
 107:      *
 108:      * @param t  the arrow type.
 109:      *
 110:      * @return the arrow shape.
 111:      */
 112:     private Shape getArrow(final int t) {
 113:         switch (t) {
 114:             case UP : return getUpArrow();
 115:             case DOWN : return getDownArrow();
 116:             default : return getUpArrow();
 117:         }
 118:     }
 119: 
 120:     /**
 121:      * Returns an up arrow.
 122:      *
 123:      * @return an up arrow.
 124:      */
 125:     private Shape getUpArrow() {
 126:         final Polygon result = new Polygon();
 127:         result.addPoint(7, 2);
 128:         result.addPoint(2, 7);
 129:         result.addPoint(12, 7);
 130:         return result;
 131:     }
 132: 
 133:     /**
 134:      * Returns a down arrow.
 135:      *
 136:      * @return a down arrow.
 137:      */
 138:     private Shape getDownArrow() {
 139:         final Polygon result = new Polygon();
 140:         result.addPoint(7, 7);
 141:         result.addPoint(2, 2);
 142:         result.addPoint(12, 2);
 143:         return result;
 144:     }
 145: 
 146: }