001 /* =========================================================== 002 * JFreeChart : a free chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jfreechart/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * ----------------- 028 * JThermometer.java 029 * ----------------- 030 * A plot that displays a single value in a thermometer type display. 031 * 032 * (C) Copyright 2000-2008, Australian Antarctic Division and Contributors. 033 * 034 * Original Author: Bryan Scott. 035 * Contributor(s): David Gilbert (for Object Refinery Limited); 036 * Irv Thomae; 037 * 038 * Changes (from 17-Sep-2002) 039 * -------------------------- 040 * 17-Sep-2002 : Reviewed with Checkstyle utility (DG); 041 * 18-Sep-2003 : Integrated new methods contributed by Irv Thomae (DG); 042 * 08-Jan-2004 : Renamed AbstractTitle --> Title and moved to new package (DG); 043 * 31-May-2005 : Fixed typo in method name (DG); 044 * 045 */ 046 047 package org.jfree.chart.plot; 048 049 import java.awt.CardLayout; 050 import java.awt.Color; 051 import java.awt.Font; 052 import java.awt.Paint; 053 import java.io.Serializable; 054 import java.text.DecimalFormat; 055 056 import javax.swing.JPanel; 057 058 import org.jfree.chart.ChartPanel; 059 import org.jfree.chart.JFreeChart; 060 import org.jfree.chart.axis.ValueAxis; 061 import org.jfree.chart.title.TextTitle; 062 import org.jfree.chart.title.Title; 063 import org.jfree.data.general.DefaultValueDataset; 064 import org.jfree.ui.RectangleInsets; 065 066 /** 067 * An initial quick and dirty. The concept behind this class would be to 068 * generate a gui bean that could be used within JBuilder, Netbeans etc... 069 */ 070 public class JThermometer extends JPanel implements Serializable { 071 072 /** For serialization. */ 073 private static final long serialVersionUID = 1079905665515589820L; 074 075 /** The dataset. */ 076 private DefaultValueDataset data; 077 078 /** The chart. */ 079 private JFreeChart chart; 080 081 /** The chart panel. */ 082 private ChartPanel panel; 083 084 /** The thermometer plot. */ 085 private ThermometerPlot plot = new ThermometerPlot(); 086 087 /** 088 * Default constructor. 089 */ 090 public JThermometer() { 091 super(new CardLayout()); 092 this.plot.setInsets(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); 093 this.data = new DefaultValueDataset(); 094 this.plot.setDataset(this.data); 095 this.chart = new JFreeChart(null, JFreeChart.DEFAULT_TITLE_FONT, 096 this.plot, false); 097 this.panel = new ChartPanel(this.chart); 098 add(this.panel, "Panel"); 099 setBackground(getBackground()); 100 } 101 102 /** 103 * Adds a subtitle to the chart. 104 * 105 * @param subtitle the subtitle. 106 */ 107 public void addSubtitle(Title subtitle) { 108 this.chart.addSubtitle(subtitle); 109 } 110 111 /** 112 * Adds a subtitle to the chart. 113 * 114 * @param subtitle the subtitle. 115 */ 116 public void addSubtitle(String subtitle) { 117 this.chart.addSubtitle(new TextTitle(subtitle)); 118 } 119 120 /** 121 * Adds a subtitle to the chart. 122 * 123 * @param subtitle the subtitle. 124 * @param font the subtitle font. 125 */ 126 public void addSubtitle(String subtitle, Font font) { 127 this.chart.addSubtitle(new TextTitle(subtitle, font)); 128 } 129 130 /** 131 * Sets the value format for the thermometer. 132 * 133 * @param df the formatter. 134 */ 135 public void setValueFormat(DecimalFormat df) { 136 this.plot.setValueFormat(df); 137 } 138 139 /** 140 * Sets the lower and upper bounds for the thermometer. 141 * 142 * @param lower the lower bound. 143 * @param upper the upper bound. 144 */ 145 public void setRange(double lower, double upper) { 146 this.plot.setRange(lower, upper); 147 } 148 149 /** 150 * Sets the range. 151 * 152 * @param range the range type. 153 * @param displayLow the low value. 154 * @param displayHigh the high value. 155 */ 156 public void setSubrangeInfo(int range, double displayLow, 157 double displayHigh) { 158 this.plot.setSubrangeInfo(range, displayLow, displayHigh); 159 } 160 161 /** 162 * Sets the range. 163 * 164 * @param range the range type. 165 * @param rangeLow the low value for the range. 166 * @param rangeHigh the high value for the range. 167 * @param displayLow the low value for display. 168 * @param displayHigh the high value for display. 169 */ 170 public void setSubrangeInfo(int range, 171 double rangeLow, double rangeHigh, 172 double displayLow, double displayHigh) { 173 174 this.plot.setSubrangeInfo(range, rangeLow, rangeHigh, displayLow, 175 displayHigh); 176 177 } 178 179 /** 180 * Sets the location at which the temperature value is displayed. 181 * 182 * @param loc the location. 183 */ 184 public void setValueLocation(int loc) { 185 this.plot.setValueLocation(loc); 186 this.panel.repaint(); 187 } 188 189 /** 190 * Sets the value paint. 191 * 192 * @param paint the paint. 193 */ 194 public void setValuePaint(Paint paint) { 195 this.plot.setValuePaint(paint); 196 } 197 198 /** 199 * Returns the value of the thermometer. 200 * 201 * @return The value. 202 */ 203 public Number getValue() { 204 if (this.data != null) { 205 return this.data.getValue(); 206 } 207 else { 208 return null; 209 } 210 } 211 212 /** 213 * Sets the value of the thermometer. 214 * 215 * @param value the value. 216 */ 217 public void setValue(double value) { 218 setValue(new Double(value)); 219 } 220 221 /** 222 * Sets the value of the thermometer. 223 * 224 * @param value the value. 225 */ 226 public void setValue(Number value) { 227 if (this.data != null) { 228 this.data.setValue(value); 229 } 230 } 231 232 /** 233 * Sets the unit type. 234 * 235 * @param i the unit type. 236 */ 237 public void setUnits(int i) { 238 if (this.plot != null) { 239 this.plot.setUnits(i); 240 } 241 } 242 243 /** 244 * Sets the outline paint. 245 * 246 * @param p the paint. 247 */ 248 public void setOutlinePaint(Paint p) { 249 if (this.plot != null) { 250 this.plot.setOutlinePaint(p); 251 } 252 } 253 254 /** 255 * Sets the foreground color. 256 * 257 * @param fg the foreground color. 258 */ 259 public void setForeground(Color fg) { 260 super.setForeground(fg); 261 if (this.plot != null) { 262 this.plot.setThermometerPaint(fg); 263 } 264 } 265 266 /** 267 * Sets the background color. 268 * 269 * @param bg the background color. 270 */ 271 public void setBackground(Color bg) { 272 super.setBackground(bg); 273 if (this.plot != null) { 274 this.plot.setBackgroundPaint(bg); 275 } 276 if (this.chart != null) { 277 this.chart.setBackgroundPaint(bg); 278 } 279 if (this.panel != null) { 280 this.panel.setBackground(bg); 281 } 282 } 283 284 /** 285 * Sets the value font. 286 * 287 * @param f the font. 288 */ 289 public void setValueFont(Font f) { 290 if (this.plot != null) { 291 this.plot.setValueFont(f); 292 } 293 } 294 295 /** 296 * Returns the tick label font. 297 * 298 * @return The tick label font. 299 */ 300 public Font getTickLabelFont() { 301 ValueAxis axis = this.plot.getRangeAxis(); 302 return axis.getTickLabelFont(); 303 } 304 305 /** 306 * Sets the tick label font. 307 * 308 * @param font the font. 309 */ 310 public void setTickLabelFont(Font font) { 311 ValueAxis axis = this.plot.getRangeAxis(); 312 axis.setTickLabelFont(font); 313 } 314 315 /** 316 * Increases or decreases the tick font size. 317 * 318 * @param delta the change in size. 319 */ 320 public void changeTickFontSize(int delta) { 321 Font f = getTickLabelFont(); 322 String fName = f.getFontName(); 323 Font newFont = new Font(fName, f.getStyle(), (f.getSize() + delta)); 324 setTickLabelFont(newFont); 325 } 326 327 /** 328 * Sets the tick font style. 329 * 330 * @param style the style. 331 */ 332 public void setTickFontStyle(int style) { 333 Font f = getTickLabelFont(); 334 String fName = f.getFontName(); 335 Font newFont = new Font(fName, style, f.getSize()); 336 setTickLabelFont(newFont); 337 } 338 339 /** 340 * Sets the flag that controls whether or not the display range follows the 341 * data value. 342 * 343 * @param flag the new value of the flag. 344 */ 345 public void setFollowDataInSubranges(boolean flag) { 346 this.plot.setFollowDataInSubranges(flag); 347 } 348 349 /** 350 * Sets the flag that controls whether or not value lines are displayed. 351 * 352 * @param b the new flag value. 353 */ 354 public void setShowValueLines(boolean b) { 355 this.plot.setShowValueLines(b); 356 } 357 358 /** 359 * Sets the location for the axis. 360 * 361 * @param location the location. 362 */ 363 public void setShowAxisLocation(int location) { 364 this.plot.setAxisLocation(location); 365 } 366 367 /** 368 * Returns the location for the axis. 369 * 370 * @return The location. 371 */ 372 public int getShowAxisLocation() { 373 return this.plot.getAxisLocation(); 374 } 375 376 }