KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > chart > needle > LongNeedle


1 /* ===========================================================
2  * JFreeChart : a free chart 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/jfreechart/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 License
20  * along with this library; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22  *
23  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
24  * in the United States and other countries.]
25  *
26  * ---------------
27  * LongNeedle.java
28  * ---------------
29  * (C) Copyright 2002-2005, by the Australian Antarctic Division and
30  * Contributors.
31  *
32  * Original Author: Bryan Scott (for the Australian Antarctic Division);
33  * Contributor(s): David Gilbert (for Object Refinery Limited);
34  *
35  * $Id: LongNeedle.java,v 1.4 2005/05/19 15:42:54 mungady Exp $
36  *
37  * Changes:
38  * --------
39  * 25-Sep-2002 : Version 1, contributed by Bryan Scott (DG);
40  * 27-Mar-2003 : Implemented Serializable (DG);
41  * 09-Sep-2003 : Added equals() method (DG);
42  * 16-Mar-2004 : Implemented Rotation
43  */

44
45 package org.jfree.chart.needle;
46
47 import java.awt.Graphics2D JavaDoc;
48 import java.awt.geom.GeneralPath JavaDoc;
49 import java.awt.geom.Point2D JavaDoc;
50 import java.awt.geom.Rectangle2D JavaDoc;
51 import java.awt.Shape JavaDoc;
52 import java.io.Serializable JavaDoc;
53
54 /**
55  * A needle that is represented by a long line.
56  *
57  * @author Bryan Scott
58  */

59 public class LongNeedle extends MeterNeedle implements Serializable JavaDoc {
60
61     /** For serialization. */
62     private static final long serialVersionUID = -4319985779783688159L;
63     
64     /**
65      * Default constructor.
66      */

67     public LongNeedle() {
68         super();
69         setRotateY(0.8);
70     }
71
72     /**
73      * Draws the needle.
74      *
75      * @param g2 the graphics device.
76      * @param plotArea the plot area.
77      * @param rotate the rotation point.
78      * @param angle the angle.
79      */

80     protected void drawNeedle(Graphics2D JavaDoc g2, Rectangle2D JavaDoc plotArea,
81                               Point2D JavaDoc rotate, double angle) {
82
83         GeneralPath JavaDoc shape1 = new GeneralPath JavaDoc();
84         GeneralPath JavaDoc shape2 = new GeneralPath JavaDoc();
85         GeneralPath JavaDoc shape3 = new GeneralPath JavaDoc();
86
87         float minX = (float) plotArea.getMinX();
88         float minY = (float) plotArea.getMinY();
89         float maxX = (float) plotArea.getMaxX();
90         float maxY = (float) plotArea.getMaxY();
91         //float midX = (float) (minX + (plotArea.getWidth() * getRotateX()));
92
//float midY = (float) (minY + (plotArea.getHeight() * getRotateY()));
93
float midX = (float) (minX + (plotArea.getWidth() * 0.5));
94         float midY = (float) (minY + (plotArea.getHeight() * 0.8));
95         float y = maxY - (2 * (maxY - midY));
96         if (y < minY) {
97             y = minY;
98         }
99         shape1.moveTo(minX, midY);
100         shape1.lineTo(midX, minY);
101         shape1.lineTo(midX, y);
102         shape1.closePath();
103
104         shape2.moveTo(maxX, midY);
105         shape2.lineTo(midX, minY);
106         shape2.lineTo(midX, y);
107         shape2.closePath();
108
109         shape3.moveTo(minX, midY);
110         shape3.lineTo(midX, maxY);
111         shape3.lineTo(maxX, midY);
112         shape3.lineTo(midX, y);
113         shape3.closePath();
114
115         Shape JavaDoc s1 = shape1;
116         Shape JavaDoc s2 = shape2;
117         Shape JavaDoc s3 = shape3;
118
119         if ((rotate != null) && (angle != 0)) {
120             /// we have rotation huston, please spin me
121
getTransform().setToRotation(angle, rotate.getX(), rotate.getY());
122             s1 = shape1.createTransformedShape(transform);
123             s2 = shape2.createTransformedShape(transform);
124             s3 = shape3.createTransformedShape(transform);
125         }
126
127
128         if (getHighlightPaint() != null) {
129             g2.setPaint(getHighlightPaint());
130             g2.fill(s3);
131         }
132
133         if (getFillPaint() != null) {
134             g2.setPaint(getFillPaint());
135             g2.fill(s1);
136             g2.fill(s2);
137         }
138
139
140         if (getOutlinePaint() != null) {
141             g2.setStroke(getOutlineStroke());
142             g2.setPaint(getOutlinePaint());
143             g2.draw(s1);
144             g2.draw(s2);
145             g2.draw(s3);
146         }
147     }
148
149     /**
150      * Tests another object for equality with this object.
151      *
152      * @param object the object to test.
153      *
154      * @return A boolean.
155      */

156     public boolean equals(Object JavaDoc object) {
157         if (object == null) {
158             return false;
159         }
160         if (object == this) {
161             return true;
162         }
163         if (super.equals(object) && object instanceof LongNeedle) {
164             return true;
165         }
166         return false;
167     }
168
169 }
170
Popular Tags