001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.io;
017
018 import org.opengion.fukurou.util.StringUtil;
019 import org.opengion.hayabusa.common.HybsSystem;
020 import org.opengion.hayabusa.common.HybsSystemException;
021 import org.opengion.hayabusa.db.DBTableModel;
022
023 import java.util.List;
024 import java.util.ArrayList;
025 import java.util.Arrays;
026 import java.awt.Color;
027 import java.sql.Connection;
028 import java.sql.SQLException;
029 import java.text.NumberFormat;
030 import java.text.DecimalFormat; // 5.5.2.1 (2012/05/07)
031 import java.text.DecimalFormatSymbols; // 5.5.2.1 (2012/05/07)
032 import java.text.FieldPosition; // 5.5.2.1 (2012/05/07)
033
034 import org.jfree.data.general.Dataset;
035 import org.jfree.data.general.DefaultValueDataset;
036 import org.jfree.data.general.ValueDataset;
037 import org.jfree.chart.plot.ValueMarker;
038 import org.jfree.chart.axis.NumberAxis;
039 import org.jfree.chart.axis.NumberTickUnit;
040 import org.jfree.chart.renderer.category.CategoryItemRenderer;
041 import org.jfree.chart.renderer.category.BarRenderer;
042 import org.jfree.chart.renderer.category.LineAndShapeRenderer;
043 import org.jfree.chart.labels.CategoryItemLabelGenerator;
044 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
045 import org.jfree.chart.urls.CategoryURLGenerator;
046 import org.jfree.ui.RectangleInsets;
047 import org.jfree.ui.TextAnchor;
048
049 import org.jfree.chart.plot.MeterPlot; // 5.7.8.0 (2014/07/04)
050 import org.jfree.chart.plot.ThermometerPlot; // 5.7.8.0 (2014/07/04)
051 import org.jfree.chart.plot.CompassPlot; // 5.7.8.0 (2014/07/04)
052 import org.jfree.chart.plot.Plot; // 5.7.8.0 (2014/07/04)
053 import java.awt.BasicStroke; // 5.7.8.0 (2014/07/04)
054 import org.jfree.data.Range; // 5.7.8.0 (2014/07/04)
055 import org.jfree.chart.plot.MeterInterval; // 5.7.8.0 (2014/07/04)
056 import org.jfree.chart.plot.DialShape; // 5.7.8.0 (2014/07/04)
057
058 /**
059 * ChartDataset は、Dataset および、JFreeChart の個別属æ?を管ç�?�—てã�?‚‹ãƒ??タ管ç�?‚¯ラスですã?
060 * JFreeChart のグラフ合成機è?のための、å?別のグラフ描画属æ?を管ç�?�—てã�?�¾すã?
061 * å†?ƒ¨çš?�«、引数のæ–?—å?ã‚?JFreeChart のå�?‚ªブジェクトへの変換なども行ってã�?�¾すã?
062 *
063 * @version 0.9.0 2007/06/21
064 * @author Kazuhiko Hasegawa
065 * @since JDK1.1,
066 */
067 public class ChartDataset {
068
069 private Dataset dataset = null; // Dataset オブジェクãƒ?
070 private String query = null; // 実行クエリー
071 private String chartType = null; // チャートã?種é¡?
072 private String needleType = null; // Needleの種é¡?
073 private boolean baseLegend = true; // シリーズ単位ã?凡ä¾?の表示可否
074 private String valueLabel = null;
075 private double[] markValues = null; // doubleの配å?
076 private Color[] markColors = new Color[] { Color.RED }; // Colorの配å?
077 private Color[] markOverColors = null; // 4.0.3.0 (2008/01/07) マã?カーラインのè¶?�Ž色
078 private boolean useMarkAnchor = true; // 4.1.1.0 (2008/02/04) 設定å?をラベル表示するかどã�?�‹
079 private int dynamicOCNo = -1; // 4.1.1.0 (2008/02/04) 動的なマã?カーラインの基準シリーズ番号
080 private int dynamicOCadrs = -1; // 4.1.1.0 (2008/02/21) 動的なマã?カーラインの基準番号
081 private String lowerBound = null; // double
082 private String upperBound = null; // double
083 private String tickSize = null; // double 4.0.3.0 (2008/01/07)
084 private boolean useGradient = false;
085 private boolean shapesVisible = true;
086 private Color[] shapeColors = null; // 4.0.3.0 (2008/01/07) ãƒ??タ毎にShapeをå?り替える時ã?色æŒ?®?
087 private String shapeScale = null; // 4.1.1.0 (2008/02/04) 基本形 Shape の表示倍率(double)
088 private boolean useDottedLine = false;
089 private Color[] seriesColors = null; // シリーズに対応した色æŒ?®?
090 private boolean isLabelsVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のラベルを表示するかどã�?�‹
091 private boolean isMarksVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のマã?カーを表示するかどã�?�‹
092 private boolean isItemValVisible= false; // 4.1.1.0 (2008/02/04) ãƒ??タの値(itemText)を表示するかどã�?�‹
093 private boolean isItemLastVisible= false; // 4.1.2.0 (2008/03/12) ãƒ??タの値(itemText)でæœ?¾Œã?み表示するかどã�?�‹
094 private boolean useItemLabelSep = true; // 4.1.2.0 (2008/03/12) ãƒ??タの値(itemText)の表示に桁区åˆ?‚Šæ–?—を使用するかどã�?�‹
095 private String barWidth = null; // 4.0.3.0 (2008/01/07) バã?å¹?double)
096 private String maxBarWidth = null; // 4.0.2.0 (2007/12/20) バã?å¹??æœ?¤§値(0.0??.0)
097 private String itemMargin = null; // 4.0.2.0 (2007/12/20) バã?アイãƒ?ƒ のマã?ジン(0.0??.0)
098 private String visibleLimit = null; // 4.0.3.0 (2008/01/07) 表示下限値(これ以下ã?ãƒ??タは未表示)
099 private String valueInset = null; // 4.0.3.0 (2008/01/07) 縦軸表示領域INSET値
100 private double domainMargin = 0.0; // 4.1.1.0 (2008/02/14) グラフã?書きå?し位置の調整比率
101
102 private String timeFormatType = null; // 5.5.2.1 (2012/05/07) 時刻の表示方æ³?E1/E2/E3/H1/H2/H3)
103 private boolean useVerticalLabels = false; // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書ã�?false/縦書ã�?true)
104
105 /**
106 * Connection と query æ–?—å?から、Dataset オブジェクトを作æ?しますã?
107 *
108 * setChartType( String ) でæŒ?®šされたチャートタイプに応じて、Datasetオブジェクãƒ?
109 * を構築しますã?
110 * Dataset クラスはã€?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX のç®?‰€ã‚?
111 * ChartFactory クラスのチャートタイプ変換表に基づã�?�¦求めますã?
112 * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
113 * ※ Value は、conn ã‚?sql を使用してã�?�¾せん。å?は、markValues を使用してã�?�¾すã?
114 * これは、現状の暫定方法であり、今後ã?変わる可能性がありますã?
115 *
116 * @og.rev 4.0.0.0 (2007/11/28) new Double(double) â‡?Double.valueOf(double) 変更
117 *
118 * @param conn Datasetの取得å?のコネクション
119 * @param sql 取得するクエリーæ–?—å?
120 * @throws SQLException ãƒ??タベã?ス実行エラーが発生したå?å�?
121 */
122 public void makeDataset( final Connection conn,final String sql ) throws SQLException {
123 dataset = ChartFactory.newDataset( conn,sql,chartType );
124 query = sql ;
125
126 // 暫定的対応ã?本当ã?、SQL を実行してそã?値をセãƒ?ƒˆすべã�?
127 if( dataset instanceof DefaultValueDataset ) {
128 if( markValues != null && markValues.length > 0 ) {
129 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
130 }
131 else {
132 String errMsg = "markValues が指定されてã�?�¾せんã€?;
133 throw new HybsSystemException( errMsg );
134 }
135 }
136 }
137
138 /**
139 * DBTableModelオブジェクトからã?Dataset オブジェクトを作æ?しますã?
140 *
141 * setChartType( String ) でæŒ?®šされたチャートタイプに応じて、Datasetオブジェクãƒ?
142 * を構築しますã?
143 *
144 * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
145 * ※ Value は、DBTableModel を使用してã�?�¾せん。å?は、markValues を使用してã�?�¾すã?
146 * これは、現状の暫定方法であり、今後ã?変わる可能性がありますã?
147 *
148 * @og.rev 5.3.0.0 (2010/12/01) 新規追åŠ?
149 *
150 * @param table Datasetの取得å?のãƒ??ブルモãƒ?ƒ«
151 */
152 public void makeDataset( final DBTableModel table ) {
153 dataset = ChartFactory.newDataset( table,chartType );
154
155 // 暫定的対応ã?本当ã?、SQL を実行してそã?値をセãƒ?ƒˆすべã�?
156 if( dataset instanceof DefaultValueDataset ) {
157 if( markValues != null && markValues.length > 0 ) {
158 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
159 }
160 else {
161 String errMsg = "markValues が指定されてã�?�¾せんã€?;
162 throw new HybsSystemException( errMsg );
163 }
164 }
165 }
166
167 /**
168 * NumberAxis オブジェクトを作æ?しますã?
169 *
170 * NumberAxis オブジェクトã?、Value(縦軸)の属æ?を設定する為に使用されã‚?
171 * オブジェクトですã?
172 * これに、各種属æ?を設定して、å?を返しますã?
173 * 属æ?としては、isLineVisible、isLabelsVisible、isMarksVisibleã€?
174 * range(lowerBound、upperBound) ですã?
175 *
176 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
177 * @og.rev 4.0.3.0 (2008/01/07) 縦軸レンジをå?別設定ã?チックå¹?Œ‡å®?
178 * @og.rev 4.1.1.0 (2008/02/04) HybsNumberAxis 採用
179 * @og.rev 4.1.1.0 (2008/02/04) setAxisLineVisible をã?isMarksVisible 値で設定するã?
180 * @og.rev 5.5.2.1 (2012/05/07) timeFormatType 、useVerticalLabels 属æ?を追åŠ?�™るã?
181 * @og.rev 5.8.5.0 (2015/03/06) 縦軸表示の暫定対応ã?ための修正
182 *
183 * @return 縦軸の属æ?(NumberAxisオブジェクãƒ?
184 */
185 protected NumberAxis makeNumberAxis() {
186 NumberAxis axis = new HybsNumberAxis( valueLabel );
187
188 // 縦軸レンジå¹??軸設å®?
189 if( lowerBound != null ) {
190 // axis.setLowerBound( Double.parseDouble( lowerBound ) );
191 final double lower = Double.parseDouble( lowerBound );// 5.8.5.0 (2015/03/06)
192 axis.setLowerBound( lower );
193 }
194
195 if( upperBound != null ) {
196 axis.setUpperBound( Double.parseDouble( upperBound ) );
197 }
198 else { // 5.8.5.0 (2015/03/06)
199 if( dataset instanceof HybsCategoryDataset ) {
200 final Range range = ((HybsCategoryDataset)dataset).getRange();
201 if( range != null ) {
202 final double upper = range.getUpperBound() * 1.1; // UpperBoundの 10% 大き目の値にするã€?
203 axis.setUpperBound( upper );
204 }
205 }
206 }
207
208 if( tickSize != null ) {
209 axis.setTickUnit( new NumberTickUnit( Double.parseDouble( tickSize ) ) );
210 }
211
212 axis.setTickLabelsVisible( isLabelsVisible );
213 axis.setTickMarksVisible ( isMarksVisible );
214 axis.setAxisLineVisible ( isMarksVisible ); // 4.1.1.0 (2008/02/04)
215
216 if( valueInset != null ) {
217 double rightInset = Double.parseDouble( valueInset );
218 RectangleInsets base = axis.getTickLabelInsets();
219 RectangleInsets inset = new RectangleInsets(
220 base.getUnitType(), // UnitType unitType
221 base.getTop(), // double top
222 base.getLeft(), // double left
223 base.getBottom(), // double bottom
224 base.getRight() + rightInset // double right
225 );
226 axis.setTickLabelInsets( inset ) ;
227 }
228
229 // 5.5.2.1 (2012/05/07) 時刻の表示方æ³?E1/E2/E3/H1/H2/H3)
230 if( timeFormatType != null ) {
231 axis.setNumberFormatOverride( new HybsTimeFormat( timeFormatType ) );
232 }
233
234 // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書ã�?false/縦書ã�?true)
235 if( useVerticalLabels ) {
236 axis.setVerticalTickLabels( true ); // 処ç�?š„には冗長ã€?
237 }
238
239 return axis;
240 }
241
242 /**
243 * 検索を行う クエリーæ–?—å?を返しますã?
244 *
245 * これは、makeDataset( Connection ,String ) メソãƒ?ƒ‰でæŒ?®šしたã?
246 * sql 属æ?の設定å?そã?もã?ですã?
247 *
248 * @return 取得するクエリーæ–?—å?
249 */
250 public String getQuery() { return query; }
251
252 /**
253 * Dataset オブジェクトを取得しますã?
254 *
255 * makeDataset( Connection,String ) で、予めオブジェクトを構築しておく
256 * å¿?¦�がありますã?
257 * Dataset クラスはã€?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX のç®?‰€ã‚?
258 * ChartFactory クラスのチャートタイプ変換表に基づã�?�¦求めますã?
259 * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
260 *
261 * @return Datasetオブジェクãƒ?
262 * @see #makeDataset( Connection ,String )
263 */
264 protected Dataset getDataset() { return dataset; }
265
266 /**
267 * Dataset オブジェクトを作æ?する時ã?チャートタイプをæŒ?®šしますã?
268 *
269 * チャートタイãƒ?は、外部からチャートをæŒ?®šするã?に便利なように、キーåŒ?
270 * されてã�?�¾すã?こã?キーに基づã�?�¦、ChartFactory クラスの
271 * チャートタイプ変換表に基づã�?�¦、レンãƒ?ƒ©ーã‚??ãƒ??タセãƒ?ƒˆを作æ?しますã?
272 *
273 * @param type チャートタイãƒ?
274 */
275 public void setChartType( final String type ) {
276 if( type != null && type.length() > 0 ) {
277 chartType = type;
278 }
279 }
280
281 /**
282 * Dataset オブジェクトを作æ?する時ã?NeedleタイプをæŒ?®šしますã?
283 *
284 * Needleタイãƒ?は、MeterPlot,Compassチャートを使用する場合にæŒ?®šしますã?
285 *
286 * MeterPlot
287 * org.jfree.chart.plot.DialShape のæŒ?®šキ?°?œー??¾žとして、CHORD,CIRCLE,PIE が指定可能ですã?
288 * 初期値は、CIRCLE ですã?
289 *
290 * Compass
291 * org.jfree.chart.needle.MeterNeedle のæŒ?®šキ?°?œー??¾žとして、下記ã??™種類がæŒ?®š可能ですã?
292 * æŒ?®šã?、Arrow,Line,Long,Pin,Plum,Pointer,Ship,Wind,Arrow,MiddlePin とã�?�†æ–?—å?ですã?
293 * 初期値は、Pointer ですã?
294 *
295 * 0 = ArrowNeedle;
296 * 1 = LineNeedle;
297 * 2 = LongNeedle;
298 * 3 = PinNeedle;
299 * 4 = PlumNeedle;
300 * 5 = PointerNeedle;
301 * 6 = ShipNeedle;
302 * 7 = WindNeedle;
303 * 8 = ArrowNeedle;
304 * 9 = MiddlePinNeedle;
305 *
306 * @og.rev 5.7.8.0 (2014/07/04) 新規追åŠ?
307 *
308 * @param type Needleタイãƒ?
309 */
310 public void setNeedleType( final String type ) {
311 if( type != null && type.length() > 0 ) {
312 needleType = type;
313 }
314 }
315
316 /**
317 * Dataset オブジェクトを作æ?する時ã?チャートタイプを取得しますã?
318 *
319 * チャートタイãƒ?は、外部からチャートをæŒ?®šするã?に便利なように、キーåŒ?
320 * されてã�?�¾すã?こã?キーに基づã�?�¦、ChartFactory クラスの
321 * チャートタイプ変換表に基づã�?�¦、レンãƒ?ƒ©ーã‚??ãƒ??タセãƒ?ƒˆを作æ?しますã?
322 *
323 * @return チャートタイãƒ?
324 */
325 protected String getChartType() { return chartType; }
326
327 /**
328 * シリーズ単位ã?凡ä¾?の表示可否を設定しますã?
329 *
330 * @param baseLeg シリーズ単位ã?凡ä¾?の表示可否
331 */
332 public void setBaseLegend( final boolean baseLeg ) {
333 baseLegend = baseLeg;
334 }
335
336 /**
337 * Renderer 関連の共通インターフェースを返しますã?
338 *
339 * setChartType( String )で設定された、チャートタイプに応じたã?レンãƒ?ƒ©ーã‚?
340 * 返しますã?
341 * 対応表は、ChartFactory クラスに持ってã�?�¾すã?
342 * 基本çš?�«は、チャートタイãƒ?は、この、レンãƒ?ƒ©ー名称から決定してã�?�¾すã?
343 *
344 * @og.rev 4.1.1.0 (2008/02/04) useDynamicOC , isItemValVisible , shapeScale 属æ?追åŠ?
345 * @og.rev 4.1.1.0 (2008/02/04) クリãƒ?‚«ブル・マップã?設定を移動ã?serNo 引数追åŠ?
346 * @og.rev 4.1.1.0 (2008/02/04) 返す型を CategoryItemRenderer に変更
347 * @og.rev 4.1.1.0 (2008/02/16) HybsStackedBarRenderer に domainMargin を設å®?
348 * @og.rev 4.1.1.0 (2008/02/19) Shapes の設定をこちらに移動ã?
349 * @og.rev 4.1.2.0 (2008/03/12) isItemLastVisible の設å®?
350 *
351 * @param serNo シリアルNo
352 * @param urlGen CategoryURLGeneratorオブジェクãƒ?
353 *
354 * @return レンãƒ?ƒ©ーの共通インターフェース
355 * @see org.jfree.chart.renderer.category.CategoryItemRenderer
356 * @see org.jfree.chart.renderer.xy.XYItemRenderer
357 */
358 protected CategoryItemRenderer getRenderer( final int serNo , final CategoryURLGenerator urlGen ) {
359 TypeRenderer typeRen = ChartFactory.getTypeRenderer( chartType );
360 CategoryItemRenderer rend = (CategoryItemRenderer)typeRen.getRenderer();
361
362 // 4.1.1.0 (2008/02/19) LineAndShapeRenderer オブジェクトã?場合ã?設å®?
363 if( rend instanceof LineAndShapeRenderer ) {
364 LineAndShapeRenderer lsRend = (LineAndShapeRenderer)rend;
365
366 // シェーãƒ?四è§?表示。serNo å†??表示は、å?別に行いますã?
367 lsRend.setBaseShapesVisible( shapesVisible );
368 if( serNo >= 0 ) {
369 lsRend.setSeriesShapesVisible( serNo,true );
370 }
371
372 // 4.1.1.0 (2008/02/04) 繰返しshapeの開始番号(初期値:??
373 ShapeList shapeList = new ShapeList();
374 for( int i=0; i<shapeList.size(); i++ ) {
375 lsRend.setSeriesShape( i,shapeList.getShape(i) );
376 }
377 }
378
379 // 4.0.3.0 (2008/01/07) HybsLineRenderer 特別処ç�?
380 if( rend instanceof HybsLineRenderer ) {
381 HybsLineRenderer hyRend = (HybsLineRenderer)rend ;
382 if( shapeColors != null ) {
383 hyRend.setShapeColors( shapeColors );
384 }
385
386 // 4.1.1.0 (2008/02/04) shapeの大きさの倍率(初期値:null)
387 hyRend.setShapeScale( shapeScale );
388
389 // 縦軸マã?カーのè¶?�Ž時Shape色æŒ?®?未使用時ã? null)
390 if( markOverColors != null ) {
391 hyRend.setValueMarkOverColors( getValueMarkOverColors(),dynamicOCNo );
392 }
393
394 // 表示下限値(これ以下ã?ãƒ??タは未表示)の値(double)を指å®?
395 if( visibleLimit != null ) {
396 hyRend.setVisibleLimit( Double.valueOf( visibleLimit ) );
397 }
398 }
399
400 // 4.0.2.0 (2007/12/20) BarRenderer オブジェクトã?場合にマã?ジン等を設定しますã?
401 if( rend instanceof BarRenderer ) {
402 BarRenderer barRend = (BarRenderer)rend ;
403
404 // 棒ã?間を表示領域を1として小数点以下ã?数値でå¹?‚’設定すã‚?0.0??.0)
405 if( itemMargin != null ) {
406 double margin = Double.parseDouble( itemMargin );
407 barRend.setItemMargin( margin ) ;
408 }
409
410 // 棒ã?å¹?‚’設定すã€?¡¨示領域を1として小数点以下ã?数値でå¹?‚’設定すã‚?0.0??.0)
411 if( maxBarWidth != null ) {
412 barRend.setMaximumBarWidth( Double.parseDouble( maxBarWidth ) ) ;
413 }
414 }
415
416 // 4.1.1.0 (2008/02/16) HybsStackedBarRenderer オブジェクトã?場合に domainMargin を設定しますã?
417 if( rend instanceof HybsStackedBarRenderer ) {
418 HybsStackedBarRenderer stBarRend = (HybsStackedBarRenderer)rend ;
419
420 stBarRend.setDomainMargin( domainMargin ) ;
421 }
422
423 // シリーズ単位ã?凡ä¾?の表示可否
424 rend.setBaseSeriesVisibleInLegend( baseLegend );
425
426 // 4.1.1.0 (2008/02/04) ãƒ??タの値(itemText)を表示するかどã�?�‹
427 if( isItemValVisible ) {
428 // 4.1.2.0 (2008/03/12) 桁区åˆ?‚Šæ–?—を使用するかどã�?�‹
429 NumberFormat numForm = NumberFormat.getInstance();
430 numForm.setGroupingUsed( useItemLabelSep );
431
432 CategoryItemLabelGenerator labelGen
433 = new StandardCategoryItemLabelGenerator(
434 StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
435 numForm
436 );
437 rend.setBaseItemLabelGenerator( labelGen );
438
439 if( serNo >= 0 ) {
440 rend.setSeriesItemLabelsVisible( serNo,true );
441 }
442 else {
443 rend.setBaseItemLabelsVisible( true );
444 }
445 // 4.1.1.0 (2008/02/04) 動的なマã?カーラインを使用する場合ã?
446 // æŒ?®šã?番号は閾値なので、表示しませんã€?
447 if( dynamicOCNo >= 0 ) {
448 rend.setSeriesItemLabelsVisible( dynamicOCNo,false ); // 閾値
449 }
450
451 // 4.1.2.0 (2008/03/12) isItemLastVisible の設å®?
452 if( isItemLastVisible && rend instanceof HybsDrawItem ) {
453 ((HybsDrawItem)rend).setItemLabelLastVisible( true ) ;
454 }
455 }
456
457 // クリãƒ?‚«ブル・マッãƒ?
458 if( urlGen != null ) {
459 if( serNo >= 0 ) {
460 rend.setSeriesItemURLGenerator( serNo,urlGen );
461 }
462 else {
463 rend.setBaseItemURLGenerator( urlGen );
464 }
465 }
466
467 return rend;
468 }
469
470 /**
471 * 縦軸の表示名称を指定しますã?
472 *
473 * @param valLbl 縦軸の表示名称
474 */
475 public void setValueLabel( final String valLbl ) {
476 if( valLbl != null && valLbl.length() > 0 ) {
477 valueLabel = valLbl;
478 }
479 }
480
481 /**
482 * 縦軸の表示名称を取得しますã?
483 *
484 * @return 縦軸の表示名称
485 */
486 protected String getValueLabel() { return valueLabel; }
487
488 /**
489 * マã?カーラインの設定å?配å?を指定しますã?
490 *
491 * æŒ?®šã?値にマã?カーラインを引きますã?
492 * 色は、setMarkColor( String ) でæŒ?®šしますã?
493 * markColors と、あわせて設定するå¿?¦�がありますã?
494 * markColorsがã?æŒ?®šされてã�?�ªã�??合ã?、Color.RED で マã?カーされますã?
495 * dynamicOCNo を使用する場合ã?、そのValues の並びのç®?‰€にã€?
496 * "G" とã�?�†æ–?—å?を設定して下さã�??
497 * 例ï¼?000,G 基準1ã?ã€?000の直線ã?基準2ã?、グラãƒ?とã�?�†意味ã€?
498 *
499 * @og.rev 4.1.1.0 (2008/02/21) 基準ラインにグラフを使用する場合ã?位置æŒ?®?
500 *
501 * @param mkVal マã?カーラインの設定å?配å?
502 * @see #setMarkColors( String[] )
503 */
504 public void setMarkValues( final String[] mkVal ) {
505 if( mkVal != null && mkVal.length > 0 ) {
506 int size = mkVal.length;
507 markValues = new double[size];
508 for( int i=0; i<size; i++ ) {
509 if( "G".equals( mkVal[i] ) ) {
510 dynamicOCadrs = i;
511 markValues[i] = 0.0;
512 }
513 else {
514 markValues[i] = Double.parseDouble( mkVal[i] );
515 }
516 }
517 }
518 }
519
520 /**
521 * マã?カーラインの色をé?列指定しますã?
522 *
523 * マã?カーラインとは、縦軸設定ã?ラインの事で、縦軸の設定å?(markValues)に
524 * 横方向にラインを付与しますã?こã?ラインの色をã?カンマ区åˆ?‚Š形式で
525 * æŒ?®šしますã?
526 * markValues と、あわせて設定するå¿?¦�がありますã?
527 * 個数が異なるå?合ã?、markValues が優先されã?無æŒ?®šã?場合ã?、Color.REDで
528 * 表示されますã?
529 *
530 * <pre>
531 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
532 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE)
533 * #XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
534 * </pre>
535 *
536 * @param mkCol マã?カーラインの色配å?
537 * @see java.awt.Color#BLACK
538 * @see #setMarkValues( String[] )
539 */
540 public void setMarkColors( final String[] mkCol ) {
541 if( mkCol != null && mkCol.length > 0 ) {
542 int size = mkCol.length;
543 markColors = new Color[size];
544 for( int i=0; i<size; i++ ) {
545 markColors[i] = StringUtil.getColorInstance( mkCol[i] );
546 }
547 }
548 }
549
550 /**
551 * マã?カーライン描画時に、その設定å?を表示しますã?
552 *
553 * マã?カーラインの縦軸の設定å?(markValues)に、設定å?をラベル表示しますã?
554 * 位置は、TextAnchor.BASELINE_LEFT 固定ですã?
555 * 初期値は、表示する(true)ですã?
556 *
557 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
558 *
559 * @param useAnchor true:設定å?を表示するã€?
560 */
561 public void setUseMarkAnchor( final boolean useAnchor ) {
562 useMarkAnchor = useAnchor ;
563 }
564
565 /**
566 * マã?カーラインのè¶?�Ž時ã?Shape色をカンマ区åˆ?‚Š形式でè¤?•°æŒ?®šしますã?
567 *
568 * HybsLine でのみ使用可能ですã?
569 * マã?カーラインを使用する場合に、そのラインをè¶?�ˆなã�?‰²、è¶?�ˆる色を指定しますã?
570 * こã?色のæŒ?®šã?、ã?ーカーラインの色ã‚??ーカーラインの設定å?の個数?‹1に
571 * なりますã?つまりã?色?‘:設定å??‘:色?’:設定å??’:色??となりますã?
572 * 色?‘ã?、設定å??‘より小さã�??合に使用され、色?’ã?、設定å??‘より大きくã€?
573 * 設定å??’より小さã�??合ã?色?“ã?、設定å??’より大きい場合になりますã?
574 *
575 * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
576 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
577 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
578 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
579 * markValues と、あわせて設定するå¿?¦�がありますã?
580 * どちらかがã?æŒ?®šされてã�?�ªã�??合ã?、ã?ーカー表示されませんã€?
581 * <pre>
582 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
583 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE)
584 * #XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
585 * </pre>
586 *
587 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
588 *
589 * @param ovCol マã?カーラインのè¶?�Ž時ã?Shape色
590 * @see java.awt.Color#BLACK
591 */
592 public void setMarkOverColors( final String[] ovCol ) {
593 if( ovCol != null && ovCol.length > 0 ) {
594 int size = ovCol.length;
595 markOverColors = new Color[size];
596 for( int i=0; i<size; i++ ) {
597 markOverColors[i] = StringUtil.getColorInstance( ovCol[i] );
598 }
599 }
600 }
601
602 /**
603 * マã?カーラインのè¶?�Ž時ã?Shape色を規定するオブジェクトを返しますã?
604 *
605 * HybsLine でのみ使用可能ですã?
606 * 設定情報が存在しなã�??合ã?、null を返しますã?
607 *
608 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
609 * @og.rev 4.1.1.0 (2008/02/04) markColors 属æ?追åŠ?
610 * @og.rev 4.1.1.1 (2008/02/25) markValues での "G" æŒ?®šをè€??
611 *
612 * @return マã?カーラインのè¶?�Ž時ã?Shape色管ç�?‚ªブジェクãƒ?
613 */
614 private ValueMarkOverColors getValueMarkOverColors() {
615 ValueMarkOverColors vmoc = null;
616
617 if( markValues != null && markOverColors != null &&
618 markValues.length + 1 == markOverColors.length &&
619 markValues.length >= 1 ) {
620 int dynAdrs = (dynamicOCadrs >= 0) ? dynamicOCadrs : 0 ;
621
622 vmoc = new ValueMarkOverColors(
623 markValues,
624 markOverColors,
625 markColors[dynAdrs],
626 dynamicOCadrs
627 );
628 }
629
630 return vmoc ;
631 }
632
633 /**
634 * 動的なマã?カーラインの基準シリーズ番号を設定しまã�?初期値:-1)ã€?
635 *
636 * 動的なマã?カーラインを使用する場合ã?、基準å?となるシリーズ番号を指定しますã?
637 *
638 * マã?カーラインのæœ?¸‹位閾値に相当しますã?これは、グラフ化されますがã€?
639 * Shape は自動的に削除されますã?
640 * こã?設定を使用する場合ã?æœ??のãƒ??タには、å¿?�šShapeが付きますã?それ以外ã?
641 * ãƒ??タに、Shape を付けるかどã�?�‹は、shapesVisible 属æ?でæŒ?®šしますã?
642 * こã?線ã?色は、markColors でæŒ?®šしたã?æœ?¸‹位ã?色になりますã?またã?
643 * markValues でæŒ?®šしたã?æœ?¸‹位ã?値は、使用されません。たã�?�—、色æŒ?®šã?
644 * 関係上ã?設定しておくå¿?¦�がありますã?
645 * またã?isValueVisible == true で、設定å?の値表示を行う場合も、最下位ã?
646 * 値は表示しなã�?‚ˆã�?�«しますã?
647 * 初期値は、使用しなã�?-1)ですã?
648 *
649 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
650 * @og.rev 4.1.1.0 (2008/02/19) setUseDynamicOC �setDynamicOCNo
651 *
652 * @param ocNo 動的なマã?カーラインの基準シリーズ番号
653 */
654 public void setDynamicOCNo( final int ocNo ) {
655 dynamicOCNo = ocNo;
656 }
657
658 /**
659 * マã?カーラインの ValueMarker オブジェクトé?列を返しますã?
660 *
661 * マã?カーライン は、markValues(double配å?) と markColors(Color配å?)
662 * より、ValueMarker オブジェクトをã€??次配å?化してã�?��ますã?
663 * useMarkAnchor == true の場合ã?、設定å?(markValues) の Anchor ã‚?
664 * 表示しますã?位置は、TextAnchor.BASELINE_LEFT 固定ですã?
665 * dynamicOCNo が指定された場合ã?、最下位ã?閾値は使用しませんã€?
666 *
667 * @og.rev 4.1.1.0 (2008/02/04) useMarkAnchor 属æ?追åŠ?
668 * @og.rev 4.1.1.0 (2008/02/04) 動的なオーバã?カラー useDynamicOC 属æ?追åŠ?
669 *
670 * @return マã?カーラインのオブジェクトé?åˆ?not null)
671 * @see java.awt.Color#BLACK
672 * @see #setMarkValues( String[] )
673 * @see #setMarkColors( String[] )
674 * @see #setUseMarkAnchor( boolean )
675 */
676 protected ValueMarker[] getValueMarkers() {
677 List<ValueMarker> markerList = new ArrayList<ValueMarker>();
678 int size = (markValues == null) ? 0 : markValues.length;
679 for( int i=0; i<size; i++ ) {
680 if( i != dynamicOCadrs ) {
681 ValueMarker marker = new ValueMarker( markValues[i] );
682 marker.setPaint( markColors[i] );
683 if( useMarkAnchor ) {
684 marker.setLabel( String.valueOf( markValues[i] ) );
685 marker.setLabelTextAnchor( TextAnchor.BASELINE_LEFT );
686 }
687 markerList.add( marker );
688 }
689 }
690
691 return markerList.toArray( new ValueMarker[markerList.size()] );
692 }
693
694 /**
695 * チャートã?縦軸のæœ?°�å?をセãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
696 *
697 * 何もæŒ?®šしなã�??合ã?、データのæœ?°�å?から、è?動的に計算しますã?
698 *
699 * @param lowBnd 縦軸のæœ?°�å?
700 * @see #setUpperBound( String )
701 */
702 public void setLowerBound( final String lowBnd ) {
703 if( lowBnd != null && lowBnd.length() > 0 ) {
704 lowerBound = lowBnd;
705 }
706 }
707
708 /**
709 * チャートã?縦軸のæœ?¤§値をセãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
710 *
711 * 何もæŒ?®šしなã�??合ã?、データのæœ?¤§値から、è?動的に計算しますã?
712 *
713 * @param upBnd 縦軸のæœ?¤§値
714 * @see #setLowerBound( String )
715 */
716 public void setUpperBound( final String upBnd ) {
717 if( upBnd != null && upBnd.length() > 0 ) {
718 upperBound = upBnd;
719 }
720 }
721
722 /**
723 * チャートã?縦軸の目盛ã?å¹?‚’セãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
724 *
725 * 何もæŒ?®šしなã�??合ã?、データのç¯?›²から、è?動的に計算しますã?
726 *
727 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
728 *
729 * @param size 縦軸のチック(目ç›?のå¹?
730 */
731 public void setTickSize( final String size ) {
732 if( size != null && size.length() > 0 ) {
733 tickSize = size;
734 }
735 }
736
737 /**
738 * バã?チャートã?グラãƒ??ション処ç�?‚’行うかどã�?�‹[true/false]をセãƒ?ƒˆしまã�?初期値:true)ã€?
739 *
740 * 通常のバã?チャートã?、単ä¸?‰²表示で表されますが、これにグラãƒ??ション効果を
741 * 付加するかどã�?�‹を指定しますã?
742 * 通常のバã?チャートが、少しきれã�?�«見えますã?
743 * 初期値は、true(グラãƒ??ション効果を付与すã‚?ですã?
744 *
745 * @param useGrad グラãƒ??ション処ç�?[true:する/false:しない]
746 */
747 public void setUseGradient( final boolean useGrad ) {
748 useGradient = useGrad;
749 }
750
751 /**
752 * バã?チャートã?グラãƒ??ション処ç�?‚’行うかどã�?�‹を取得しますã?
753 *
754 * 通常のバã?チャートã?、単ä¸?‰²表示で表されますが、これにグラãƒ??ション効果を
755 * 付加するかどã�?�‹を指定しますã?
756 * 通常のバã?チャートが、少しきれã�?�«見えますã?
757 * 初期値は、false(使用しなã�?ですã?
758 *
759 * @return グラãƒ??ション処ç�?する:true/しなã�?false)
760 * @see #setUseGradient( boolean )
761 */
762 protected boolean isUseGradient() { return useGradient; }
763
764 /**
765 * ラインチャートã?ポイントを四角表示するかどã�?�‹を指定しまã�?初期値:false)ã€?
766 *
767 * ラインチャートã?ã€??常、線å?で表され、各ポイントにつã�?�¦もã?線å?で接続されますã?
768 * shapesVisible ã‚?true に設定すると、各ポイントが、線上に四角く表示されã€?
769 * そã?ポイントã?位置をã?容易に判断出来るよã�?�«なりますã?
770 * 初期値は、ã?ーカーをå?れませんã€?
771 *
772 * @param shVisible ポイントを四角表示するかどã�?�‹
773 */
774 public void setShapesVisible( final boolean shVisible ) {
775 shapesVisible = shVisible;
776 }
777
778 /**
779 * ラインチャートã?ポイントを四角表示するかどã�?�‹を取得しますã?
780 *
781 * ラインチャートã?ã€??常、線å?で表され、各ポイントにつã�?�¦もã?線å?で接続されますã?
782 * shapesVisible ã‚?true に設定すると、各ポイントが、線上に四角く表示されã€?
783 * そã?ポイントã?位置をã?容易に判断出来るよã�?�«なりますã?
784 * 初期値は、ã?ーカーをå?れませんã€?
785 *
786 * @return ポイントを四角表示するかどã�?�‹
787 * @see #setShapesVisible( boolean )
788 */
789 protected boolean isShapesVisible() { return shapesVisible; }
790
791 /**
792 * ãƒ??タ毎にShapeをå?り替える時ã?色の繰返しパターンを文字å?配å?でæŒ?®šしますã?
793 *
794 * HybsLine でのみ使用可能ですã?
795 * これは、データそã?もã?がã?繰返し性のある場合に、その繰返し性に対応しã�?
796 * 形状のShape を表示させるå?合に使用しますã?
797 * 繰返しShapeの形状は、JFreeChart のシリーズ毎ã?繰返し標準形状を使用しますã?
798 * 現在のバã?ジョンではã€?¼‘0å?までの繰返しに対応可能ですã?
799 * 繰返し色をã?æŒ?®šしたå?ã�?�‘ã€??に使用されてã�?��ますã?
800 *
801 * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
802 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
803 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
804 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
805 *
806 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
807 *
808 * @param colors ãƒ??タ毎ã?色の繰返しパターン(æ–?—å?配å?)
809 * @see java.awt.Color#BLACK
810 */
811 public void setShapeColors( final String[] colors ) {
812 if( colors != null && colors.length > 0 ) {
813 int size = colors.length;
814 shapeColors = new Color[size];
815 for( int i=0; i<size; i++ ) {
816 shapeColors[i] = StringUtil.getColorInstance( colors[i] );
817 }
818 }
819 }
820
821 /**
822 * shapeの大きさをå?çŽ?Œ‡定で変更しまã�?初期値:null)ã€?
823 *
824 * ラインチャートã?Shape(å�?‚°ラフã?ポイントã?マã?カー)の大きさはã€??常はã€?
825 * 自動設定されますã?
826 * こã?大きさをã?倍率æŒ?®šで、変更可能ですã?
827 * æŒ?®šã?、double 型ですã?
828 * 初期値は、null は、スケール変更しません(自動設定ã?ままの大きさ)
829 *
830 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
831 *
832 * @param scale shapeの大きさの倍率
833 */
834 public void setShapeScale( final String scale ) {
835 shapeScale = scale;
836 }
837
838 /**
839 * ラインチャートã?線をドットラインにするかどã�?�‹を指定しまã�?初期値:false)ã€?
840 *
841 * ラインチャートã?ã€??常、線å?で表されますã?
842 * これに、点線で表すことで、グラフã?違いをã?色ã�?�‘でなく形状でも識別
843 * しやすくすることが可能ですã?
844 * 初期値は、線å?ですã?
845 *
846 * @param useDotLine ドットラインにするかどã�?�‹
847 */
848 public void setUseDottedLine( final boolean useDotLine ) {
849 useDottedLine = useDotLine;
850 }
851
852 /**
853 * ラインチャートã?線をドットラインにするかどã�?�‹を取得しますã?
854 *
855 * ラインチャートã?ã€??常、線å?で表されますã?
856 * これに、点線で表すことで、グラフã?違いをã?色ã�?�‘でなく形状でも識別
857 * しやすくすることが可能ですã?
858 * 初期値は、線å?ですã?
859 *
860 * @return ドットラインにするかどã�?�‹
861 * @see #setUseDottedLine( boolean )
862 */
863 protected boolean isUseDottedLine() { return useDottedLine; }
864
865 /**
866 * è¤?•°チャート描画時ã?チャート色の繰返しパターンを文字å?配å?でæŒ?®šしますã?
867 *
868 * 通常、è¤?•°のチャートを同時に表示させるå?合ã?、縦軸がå?通であればã€?
869 * ?‘回のSelectåˆ?�§è¤?•°ãƒ??タを取得しますã?
870 * こã?、データをシリーズと呼んでおり、これを区別する為に、色をå?けますã?
871 * 初期値は、JFreeChart がè?動で割り振りますã?
872 * これをã?外部からCVS形式で、カンマ区åˆ?‚Šで色コードをæŒ?®šしますã?
873 * æŒ?®šデータが多い場合ã?、多いåˆ??色は使用されません。少なã�??合ã?ã€?
874 * é ?•ªに繰り返して使用されますã?
875 * 例えばã€?¼‘色ã�?�‘æŒ?®šしたå?合ã?、すべてのシリーズが同じ色で表されますã?
876 *
877 * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
878 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
879 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
880 * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
881 *
882 * @param colors チャート色の繰返しパターン(æ–?—å?配å?)
883 * @see java.awt.Color#BLACK
884 */
885 public void setSeriesColors( final String[] colors ) {
886 if( colors != null && colors.length > 0 ) {
887 int size = colors.length;
888 seriesColors = new Color[size];
889 for( int i=0; i<size; i++ ) {
890 seriesColors[i] = StringUtil.getColorInstance( colors[i] );
891 }
892 }
893 }
894
895 /**
896 * è¤?•°チャート描画時ã?チャート色の繰返しパターンをColor配å?でæŒ?®šしますã?
897 *
898 * @return チャート色の繰返しパターン(Color配å?)
899 * @see #setSeriesColors( String[] )
900 */
901 protected Color[] getSeriesColors() {
902 return seriesColors ;
903 }
904
905 /**
906 * Value(縦軸)のラベルを表示するかどã�?�‹を指定しまã�?初期値:true[表示する])ã€?
907 *
908 * ValueAxis にて設定される、縦軸æƒ??の、ラベルを表示するかどã�?�‹æŒ?®šしますã?
909 * 初期値は、true(表示する)ですã?
910 *
911 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
912 *
913 * @param labelsVisible Value(縦軸)のラベルを表示するかどã�?�‹
914 */
915 public void setValueLabelsVisible( final boolean labelsVisible ) {
916 isLabelsVisible = labelsVisible;
917 }
918
919 /**
920 * Value(縦軸)のマã?カーを表示するかどã�?�‹を指定しまã�?初期値:true[表示する])ã€?
921 *
922 * ValueAxis にて設定される、縦軸æƒ??の、ã?ーカーを表示するかどã�?�‹æŒ?®šしますã?
923 * 初期値は、true(表示する)ですã?
924 *
925 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
926 *
927 * @param marksVisible Value(縦軸)のマã?カーを表示するかどã�?�‹
928 */
929 public void setValueMarksVisible( final boolean marksVisible ) {
930 isMarksVisible = marksVisible;
931 }
932
933 /**
934 * ãƒ??タの値(itemText)を表示するかどã�?�‹[true/false/last]を指定しまã�?初期値:false[表示しない])ã€?
935 *
936 * CategoryItemRenderer 関連のグラフã?設定å?をグラフ上に表示するかどã�?�‹ã‚?
937 * æŒ?®šしますã?
938 * true に設定したå?合ã?通常の場合ã?、すべてのシリーズにラベル表示されますã?
939 * false に設定すると、表示されませんã€?
940 * last を設定すると、各シリーズのæœ?¾Œã?値のみ表示されますã?
941 * ChartCreate クラスに、seriesPikup が設定されてã�?‚‹場合ã?、指定ã?シリーズ
942 * のみの設定å?を表示しã?他ã?値は、表示しませんã€?
943 * 同様に、dynamicOCNo が指定されてã�?‚‹場å�?動的なマã?カーライン)
944 * æŒ?®šã?シリーズはã€?–¾値として使用されるためã?設定å?は表示されませんã€?
945 * ラベルの表示位置は、表示する線グラフã?傾きに応じてラベルの表示場æ‰?‚’
946 * 変えますã?山形、右坂ã?谷形、左å�?に応じて、上中、下右、下中、上右 に
947 * 位置を設定しますã?右にずらすã?はã€?0 ピクセル固定ですã?
948 * 初期値は、false(表示しなã�?ですã?
949 *
950 * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
951 * @og.rev 4.1.2.0 (2008/03/12) æ–?—å?のまま、受け取りるように変更
952 *
953 * @param visible ãƒ??タの値の表示のさせ方 [true/false/last]
954 * @see ChartCreate#setSeriesPikup( int )
955 */
956 public void setItemLabelVisible( final String visible ) {
957 if( "true".equalsIgnoreCase( visible ) ) {
958 isItemValVisible = true;
959 }
960 else if( "last".equalsIgnoreCase( visible ) ) {
961 isItemValVisible = true;
962 isItemLastVisible = true;
963 }
964 else if( visible != null && !"false".equalsIgnoreCase( visible ) ) {
965 String errMsg = "itemLabelVisible は、ã?true,false,last」から指定してくださいã€?"
966 + visible + "]";
967 throw new HybsSystemException( errMsg );
968 }
969 }
970
971 /**
972 * ãƒ??タの値(itemText)の表示に桁区åˆ?‚Šæ–?—を使用するかどã�?�‹を指定しますã?
973 *
974 * itemLabelVisible=true 時に、表示されるデータ値ラベルでã€?
975 * NumberFormat してã�?�¾すがã€?¼“桁区åˆ?‚Šæ–??123,456,789.0) の
976 * 区åˆ?‚Š記号を表示するかどã�?�‹を指定しますã?
977 * true を指定すると、表示しますã?false では、表示しませんã€?
978 * 初期値は、true(使用する)ですã?
979 *
980 * @og.rev 4.1.2.0 (2008/03/12) 新規追åŠ?
981 *
982 * @param used 桁区åˆ?‚Šæ–?—を使用するかどã�?�‹
983 */
984 public void setUseItemLabelSep( final boolean used ) {
985 useItemLabelSep = used;
986 }
987
988 /**
989 * 縦軸の表示領域INSET値(double)を指定しますã?
990 *
991 * 縦軸æ–?—表示領域(NumberAxis)のå¹??追åŠ??を設定しますã?
992 * これはã€??常の表示領域の左側にスペã?スを挿入しますã?
993 * あくまで、追åŠ?�™るå?なので、文字ã?長さã?含まれませんã€?
994 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
995 *
996 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
997 *
998 * @param inset Value(縦軸)の表示領域INSET値
999 */
1000 public void setValueInset( final String inset ) {
1001 valueInset = inset;
1002 }
1003
1004 /**
1005 * BOXチャートã?バã?å¹?double)を指定しますã?
1006 *
1007 * BOXチャートã?バã?å¹?double)を指定しますã?
1008 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
1009 * 使用した描画のみですã?
1010 * 棒グラフã?バã?å¹?Œ‡定ã?、直接、CategoryItemRendererState に設定してã�?�¾すã?
1011 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用ã�?�¦比率でæŒ?®šしますã?
1012 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1013 *
1014 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1015 *
1016 * @param width BOXチャートã?バã?å¹?double)
1017 */
1018 public void setBarWidth( final String width ) {
1019 barWidth = width;
1020 }
1021
1022 /**
1023 * BOXチャートã?バã?å¹?double)を取得しますã?
1024 *
1025 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
1026 * 使用した描画のみですã?
1027 * 棒グラフã?バã?å¹?Œ‡定ã?、直接、CategoryItemRendererState に設定してã�?�¾すã?
1028 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用ã�?�¦比率でæŒ?®šしますã?
1029 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1030 *
1031 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1032 *
1033 * @return BOXチャートã?バã?å¹?double)のæ–?—å?
1034 */
1035 protected String getBarWidth() {
1036 return barWidth ;
1037 }
1038
1039 /**
1040 * BOXチャートã?バã?å¹??æœ?¤§値(0.0??.0)を指定しますã?
1041 *
1042 * BOXチャートã?バã?å¹??比率のæœ?¤§値を指定しますã?
1043 * 表示領域を1として小数点以下ã?数値で棒ã?å¹?‚’設定しますã?
1044 * 設定したå¹?�«無ç�?�Œある時ã?適当なサイズに調整されますã?
1045 * (小さくしたときには棒が線ã?ようになã‚?
1046 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
1047 * 使用した描画のみですã?
1048 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1049 *
1050 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
1051 *
1052 * @param barWidth BOXチャートã?バã?å¹??æœ?¤§値(0.0??.0)
1053 */
1054 public void setBarMaxWidth( final String barWidth ) {
1055 maxBarWidth = barWidth;
1056 }
1057
1058 /**
1059 * BOXチャートã?バã?アイãƒ?ƒ のマã?ジン(0.0??.0)を指定しますã?
1060 *
1061 * BOXチャートã?バã?アイãƒ?ƒ のマã?ジンの比率を指定しますã?
1062 * 棒ã?間を表示領域を1として小数点以下ã?数値でå¹?‚’設定しますã?
1063 * 無ç�?�Œある時ã?適当なサイズに調整されますã?
1064 * barMaxWidth より優先されますã?
1065 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
1066 * 使用した描画のみですã?
1067 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1068 *
1069 * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
1070 *
1071 * @param margin BOXチャートã?バã?アイãƒ?ƒ のマã?ジン(0.0??.0)
1072 */
1073 public void setBarItemMargin( final String margin ) {
1074 itemMargin = margin;
1075 }
1076
1077 /**
1078 * 表示下限値(これ以下ã?ãƒ??タは未表示)の値(double)を指定しますã?
1079 *
1080 * HybsLine でのみ使用可能ですã?
1081 * こã?設定å?以下ã?ãƒ??タは、存在しなã�?‰±ã�?�¨しますã?
1082 * Lineを引くときã?こã?ãƒ??タと、存在してã�?‚‹ãƒ??タ間にラインは引かれませんã€?
1083 * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1084 *
1085 * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1086 *
1087 * @param limit 表示下限値(これ以下ã?ãƒ??タは未表示)
1088 */
1089 public void setVisibleLimit( final String limit ) {
1090 visibleLimit = limit;
1091 }
1092
1093 /**
1094 * グラフã?書きå?し位置の調整比率を指定しますã?
1095 *
1096 * グラフを描画する場合ã?、書きå?し位置を少しずらしますã?
1097 * これは、グラフã?å¹?�«対して、比率でæŒ?®šしますã?
1098 * 0.0(初期値)の場合ã?、å?期描画位置である、CategoryAnchor.Middle と
1099 * 同じç®?‰€から、書きå?されますã?
1100 * 1.0 の場合ã?中å¿?�‹らã?グラフå¹??半å?が加算されã?END位置にå¯?‚Šますã?
1101 * 同様にã€?1.0 の場合ã?、グラフå¹??半å?が減算されã?START 位置になりますã?
1102 * つまりã?中å¿?�‹らã?グラフå¹??半å?単位で、前方/後方にずらす事が出来ますã?
1103 * 書きå?し位置 ??中å¿?Middle) + (domainMargin)?Šå¹???
1104 * 初期値はã€?.0(真ん中:MIDDLE)ですã?
1105 *
1106 * @og.rev 4.1.1.0 (2008/02/14) 新規追åŠ?
1107 *
1108 * @param margin グラフã?書きå?し位置の調整比率
1109 */
1110 public void setDomainMargin( final double margin ) {
1111 domainMargin = margin;
1112 }
1113
1114 /**
1115 * 時刻を表すå?合ã?表現の仕方を指定しまã�?初期値:null)ã€?
1116 *
1117 * HybsNumberAxis にオーバã?ライドすã‚?時間を表示する DecimalFormat のå†?ƒ¨クラスを利用するに当たりã?
1118 * 時刻の表示方法をæŒ?®šしますã?
1119 * 外部から与える数字ã?ã€??続してã�?‚‹å¿?¦�があるためã€?¼‘0é?数ですã?
1120 * たとえã?ã€?700 â†?17:00 , 2150 â†?21:30 とã�?�†感じですã?
1121 * 2400 をè¶?�ˆると日付違ã�?�«なりますã?
1122 *
1123 * 英語表è¨?:)と日本語表è¨?æ™?の区別とã€?4時間をè¶?�ˆるå?合ã?表示方法によってã€?¼–種類ã?パターンが存在しますã?
1124 * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1125 * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1126 * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1127 * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1128 * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1129 * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1130 * 初期値は、使用しなã�?-1)ですã?
1131 *
1132 * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1133 *
1134 * @param type 時刻の表示方æ³?[E1/E2/E3/H1/H2/H3]
1135 */
1136 public void setTimeFormatType( final String type ) {
1137 timeFormatType = type;
1138 }
1139
1140 /**
1141 * ラベルの表示向きを縦にするかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1142 *
1143 * ChartCreate の rotationLabel は、角度を指定できましたがã?NumberAxis ではã€?
1144 * 縦にするかどã�?�‹のæŒ?®šしかできませんã€?
1145 * ここでは、true を指定するとラベルは、縦書きになりますã?
1146 * 初期値は、false(横書ã�?ですã?
1147 *
1148 * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1149 *
1150 * @param useVLavels ラベルの表示向き [false:横書ã�?:true:縦書き]
1151 */
1152 public void setUseVerticalLabels( final boolean useVLavels ) {
1153 useVerticalLabels = useVLavels;
1154 }
1155
1156 /**
1157 * MeterPlot にå¿?¦�なæƒ??を設定しますã?
1158 *
1159 * これは、ChartDataset(こã?クラス)にå¿?¦�な getterメソãƒ?ƒ‰を用意してã€?
1160 * 利用側のクラス(ChartPlot_Pie) でセãƒ?ƒˆすべきですが、メソãƒ?ƒ‰が増えるã?でã€?
1161 * こちらに MeterPlotオブジェクトを渡して、メソãƒ?ƒ‰数を減らそうとしてã�?‚‹ã�?�‘ですã?
1162 *
1163 * lowerBound は、最小å?(low)
1164 * upperBound は、最大値(upp)
1165 * markValues 値,A,B,C
1166 * markOverColors GREEN,BLUE,YELLOW,RED
1167 * low-A⇒GREEN , A-B⇒BLUE , B-C⇒YELLOW , C-upp⇒RED で、MeterIntervalを指定しますã?
1168 *
1169 * shapeColors に、NeedlePaint,ValuePaint,TickPaint,TickLabelPaint,DialBackgroundPaint,DialOutlinePaint を指定できますã?
1170 * 初期値は、BLACK,BLACK,BLACK,BLACK,透æ?,BLACK ですã?
1171 * needleType に、DialShape のæŒ?®šキ?°?œー??¾žとして、CHORD,CIRCLE,PIE が指定可能ですã?
1172 * æŒ?®š方法としては、taglib上で、chartType æŒ?®š時に、Meter_PIE などとæŒ?®šしますã?
1173 * shapeScale は、MeterAngle(メーターの表示角度) を指定できますã?
1174 * valueLabel は、MeterInterval の規定å?(値,A,B,C) に対応したå?例ラベルですã?
1175 *
1176 * @og.rev 5.7.8.0 (2014/07/04) 新規追åŠ?
1177 *
1178 * @return 値をセãƒ?ƒˆし終わったã?MeterPlotオブジェクãƒ?
1179 */
1180 protected Plot makeMeterPlot() {
1181 MeterPlot mplot = new MeterPlot();
1182
1183 // ç¯?›²(上限、下限)æŒ?®?
1184 double low= lowerBound == null ? 0.0 : Double.parseDouble( lowerBound ) ;
1185 double upp= upperBound == null ? 100.0 : Double.parseDouble( upperBound ) ;
1186 mplot.setRange( new Range( low, upp ) );
1187
1188 // markValues 値,A,B,C
1189 // markOverColors GREEN,BLUE,YELLOW,RED
1190 // low-A⇒GREEN , A-B⇒BLUE , B-C⇒YELLOW , C-upp⇒RED
1191 // ç¯?›²のæŒ?®?MeterInterval)は、markValues にã€?¼’番目の値が設定された場合に行うã€?
1192 if( markValues != null && markValues.length > 1 ) {
1193 int size = markValues.length ;
1194 if( markOverColors != null && size == markOverColors.length ) {
1195
1196 // BasicStroke に、大きな値を指定するとã€?–‹始位置がずれてしまã�??
1197 BasicStroke bs = new BasicStroke( 2.0F );
1198
1199 // valueLabel は、markValues の規定å?(A,B,C) に対応したå?例ラベルですã?
1200 String[] lbls = StringUtil.csv2Array( valueLabel );
1201 int lblSize = lbls.length ;
1202 int j = 0; // ラベルの配å?番号
1203
1204 double st = low;
1205 for( int i=1; i<=size; i++ ) {
1206 double en = i<size ? markValues[i] : upp ;
1207 Color co1 = markOverColors[i-1];
1208 Color co2 = new Color( co1.getRed() , co1.getGreen() , co1.getBlue() , 128 ); // 透過色(半é?æ˜?
1209 String lbl = j < lblSize ? lbls[j++] : "" ;
1210 mplot.addInterval( new MeterInterval( lbl, new Range( st, en ), co1, bs, co2 ) );
1211 st = en ;
1212 }
1213 }
1214 else {
1215 String errMsg = "Meter で、markValues をè¤?•°æŒ?®šするå?合ã?、同じ数のmarkOverColorsのæŒ?®šがå¿?¦�ですã?"
1216 + HybsSystem.CR ;
1217 throw new HybsSystemException( errMsg );
1218 }
1219 }
1220
1221 // ç¯?›²のæŒ?®?MeterInterval) のサンプル
1222 // mplot.addInterval(new MeterInterval("Battery LOW", new Range(0.0, 10.0),
1223 // Color.RED, new BasicStroke(2.0F), new Color(255, 0, 0, 128)));
1224 // mplot.addInterval(new MeterInterval("Moderate", new Range(10.0, 90.0),
1225 // Color.YELLOW, new BasicStroke(2.0F), new Color(255, 255, 0, 64)));
1226 // mplot.addInterval(new MeterInterval("Battery FULL", new Range(90.0, 100.0),
1227 // Color.GREEN, new BasicStroke(2.0F), new Color(0, 255, 0, 64)));
1228
1229 // TickSize を設定ã?null ならã?、å?期å?を使ã�??で、設定しなã�??
1230 if( tickSize != null ) {
1231 mplot.setTickSize( Double.parseDouble( tickSize ) );
1232 }
1233
1234 // shapeColors に、NeedlePaint,ValuePaint,TickPaint,TickLabelPaint,DialBackgroundPaint,DialOutlinePaint を指定できますã?
1235 // NeedlePaint , ValuePaint , TickPaint , TickLabelPaint , DialBackgroundPaint(=透æ?) , DialOutlinePaint
1236 Color[] shCols = new Color[] { Color.BLACK , Color.BLACK , Color.BLACK , Color.BLACK , new Color(255, 255, 255, 0), Color.BLACK }; // 初期値
1237 if( shapeColors != null && shapeColors.length > 0 ) {
1238 for( int i=0; i<shapeColors.length; i++ ) {
1239 shCols[i] = shapeColors[i];
1240 }
1241 }
1242 mplot.setNeedlePaint( shCols[0] ); // 針ã?色
1243 mplot.setValuePaint( shCols[1] ); // 値の色
1244 mplot.setTickPaint( shCols[2] ); // メモリの色
1245 mplot.setTickLabelPaint( shCols[3] ); // メモリのæ–?—ã?色
1246 mplot.setDialBackgroundPaint( shCols[4] ); // 背景色
1247 mplot.setDialOutlinePaint( shCols[5] ); // セãƒ?ƒˆしてもã?表示が変わらなã�??
1248
1249 // needleType 属æ?で、DialShape を指定できますã?
1250 DialShape dshape = DialShape.CIRCLE ; // 初期値
1251 if( needleType != null ) {
1252 if( "CHORD".equalsIgnoreCase( needleType ) ) { dshape = DialShape.CHORD; }
1253 else if( "CIRCLE".equalsIgnoreCase( needleType ) ) { dshape = DialShape.CIRCLE; } // 初期値
1254 else if( "PIE".equalsIgnoreCase( needleType ) ) { dshape = DialShape.PIE; }
1255 }
1256 mplot.setDialShape( dshape ); // CHORD,CIRCLE,PIE
1257
1258 // shapeScale は、MeterAngle(メーターの表示角度) を指å®?
1259 if( shapeScale != null ) {
1260 mplot.setMeterAngle( Integer.parseInt( shapeScale ) );
1261 }
1262
1263 // isLabelsVisible æŒ?®?
1264 mplot.setTickLabelsVisible( isLabelsVisible );
1265
1266 // そã?他決め打ちの値設å®?
1267 // mplot.setValueFont(new Font("Arial", Font.BOLD, 14));
1268 // mplot.setTickLabelFont(new Font("Arial", Font.BOLD, 14));
1269
1270 mplot.setDataset( (ValueDataset)dataset );
1271 return mplot;
1272 }
1273
1274 /**
1275 * ThermometerPlot にå¿?¦�なæƒ??を設定しますã?
1276 *
1277 * markValues 値,A,B
1278 * markOverColors GREEN,YELLOW,RED
1279 * xxx-low⇒GRAY , low-A⇒GREEN , A-B⇒YELLOW , B-upp⇒RED , upp-xxx⇒GRAY で、SubrangePaintを指定しますã?
1280 * markOverColors を指定しなã�??合ã?、ThermometerPlot.NORMAL , WARNING , CRITICAL がé?にæŒ?®šされますã?
1281 * これは、GREEN,YELLOW,RED になりますã?
1282 *
1283 * shapeColors に、ValuePaint,ThermometerPaint(温度計ã?æž?·?,MercuryPaint を指定できますã?
1284 *
1285 * @og.rev 5.7.8.0 (2014/07/04) 新規追åŠ?
1286 *
1287 * @return 値をセãƒ?ƒˆし終わったã?å…??ThermometerPlotオブジェクãƒ?
1288 */
1289 protected Plot makeThermometerPlot() {
1290 ThermometerPlot tplot = new ThermometerPlot();
1291
1292 // ç¯?›²(上限、下限)æŒ?®?
1293 double low= lowerBound == null ? 0.0 : Double.parseDouble( lowerBound ) ;
1294 double upp= upperBound == null ? 100.0 : Double.parseDouble( upperBound ) ;
1295 tplot.setRange( low , upp );
1296
1297 // markValues 値,A,B,C
1298 // markOverColors GREEN,YELLOW,RED
1299 // low-A⇒Red , A-B⇒Yellow , B-C⇒Green , C-upp⇒Blue
1300 // ç¯?›²のæŒ?®?MeterInterval)は、markValues にã€?¼’番目の値が設定された場合に行うã€?
1301 if( markValues != null && markValues.length > 1 ) {
1302 int size = markValues.length ;
1303
1304 // markOverColors が存在して、å?数がä¸??してã�?‚Œば、true
1305 boolean inCols = ( markOverColors != null && size == markOverColors.length ) ;
1306 if( inCols || markOverColors == null || markOverColors.length == 0 ) {
1307 double st = low;
1308 for( int i=1; i<=size; i++ ) {
1309 double en = i<size ? markValues[i] : upp ;
1310 // 第ä¸?¼•数は、i(é ?•ª)ではなくã?サブレンジ番号(ThermometerPlot.NORMAL , WARNING , CRITICAL)
1311 tplot.setSubrange( i-1, st, en );
1312
1313 if( inCols ) {
1314 Color co1 = markOverColors[i-1];
1315 tplot.setSubrangePaint( i-1,co1 );
1316 }
1317 st = en ;
1318 }
1319 }
1320 else {
1321 String errMsg = "Meter で、markValues をè¤?•°æŒ?®šするå?合ã?、同じ数のmarkOverColorsのæŒ?®šがå¿?¦�ですã?"
1322 + HybsSystem.CR ;
1323 throw new HybsSystemException( errMsg );
1324 }
1325 }
1326
1327 // ç¯?›²のæŒ?®?setSubrange) のサンプル
1328 // tplot.setSubrange(ThermometerPlot.NORMAL , 0.0, 55.0);
1329 // tplot.setSubrange(ThermometerPlot.WARNING , 55.0, 75.0);
1330 // tplot.setSubrange(ThermometerPlot.CRITICAL, 75.0, 150.0);
1331
1332 // shapeColors に、ValuePaint,ThermometerPaint(温度計ã?æž?·?,MercuryPaint を指定できますã?
1333 // ValuePaint , ThermometerPaint , MercuryPaint
1334 Color[] shCols = new Color[] { Color.BLACK , Color.BLACK , Color.GRAY }; // 初期値
1335 if( shapeColors != null && shapeColors.length > 0 ) {
1336 for( int i=0; i<shapeColors.length; i++ ) {
1337 shCols[i] = shapeColors[i];
1338 }
1339 }
1340 tplot.setValuePaint( shCols[0] ); // 値の色
1341 tplot.setThermometerPaint( shCols[1] ); // 温度計ã?æž?·?
1342 tplot.setMercuryPaint( shCols[2] ); // オーバã?時ã?色
1343
1344 // tplot.setValueFont(new Font("Arial", 1, 14));
1345
1346 tplot.setDataset( (ValueDataset)dataset );
1347 return tplot;
1348 }
1349
1350 /**
1351 * CompassPlot にå¿?¦�なæƒ??を設定しますã?
1352 *
1353 * shapeColors に、Compassの色を指定できますã?(å†?ƒ¨çš?�«は、SeriesPaint にセãƒ?ƒˆしてã�?�¾ã�?
1354 * SeriesPaint,SeriesOutlinePaint,RoseCenterPaint,RoseHighlightPaint,RosePaint を指定しますã?
1355 * needleType には、MeterNeedle のæŒ?®šキ?°?œー??¾žとして、下記ã??™種類がæŒ?®š可能ですã?
1356 * æŒ?®šã?、Arrow,Line,Long,Pin,Plum,Pointer,Ship,Wind,Arrow,MiddlePin とã�?�†æ–?—å?ですã?
1357 * 初期値は、Pointer ですã?
1358 *
1359 * @og.rev 5.7.8.0 (2014/07/04) 新規追åŠ?
1360 *
1361 * @return 値をセãƒ?ƒˆし終わったã?å…??CompassPlotオブジェクãƒ?
1362 */
1363 protected Plot makeCompassPlot() {
1364 CompassPlot cplot = new CompassPlot();
1365
1366 // Series æŒ?®šã?ã€? 固å®?
1367 final int serNo = 0;
1368
1369 // needleType 属æ?で、SeriesNeedle 番号を指定できますã?
1370 int sNeedle = 5 ; // Pointer
1371 if( needleType != null ) {
1372 if( "Arrow".equalsIgnoreCase( needleType ) ) { sNeedle = 0; } // 0 = ArrowNeedle;
1373 else if( "Line".equalsIgnoreCase( needleType ) ) { sNeedle = 1; } // 1 = LineNeedle;
1374 else if( "Long".equalsIgnoreCase( needleType ) ) { sNeedle = 2; } // 2 = LongNeedle;
1375 else if( "Pin".equalsIgnoreCase( needleType ) ) { sNeedle = 3; } // 3 = PinNeedle;
1376 else if( "Plum".equalsIgnoreCase( needleType ) ) { sNeedle = 4; } // 4 = PlumNeedle;
1377 else if( "Pointer".equalsIgnoreCase( needleType ) ) { sNeedle = 5; } // 5 = PointerNeedle;
1378 else if( "Ship".equalsIgnoreCase( needleType ) ) { sNeedle = 6; } // 6 = ShipNeedle;
1379 else if( "Wind".equalsIgnoreCase( needleType ) ) { sNeedle = 7; } // 7 = WindNeedle;
1380 else if( "Arrow".equalsIgnoreCase( needleType ) ) { sNeedle = 8; } // 8 = ArrowNeedle;
1381 else if( "MiddlePin".equalsIgnoreCase( needleType ) ) { sNeedle = 9; } // 9 = MiddlePinNeedle;
1382 }
1383 cplot.setSeriesNeedle( serNo, sNeedle );
1384
1385 // shapeColors に、SeriesPaint,SeriesOutlinePaint,RoseCenterPaint,RoseHighlightPaint,RosePaint を指å®?
1386 // SeriesPaint, SeriesOutlinePaint , RoseCenter , RoseHighlight, Rose
1387 Color[] shCols = new Color[] { Color.RED , Color.BLACK , Color.WHITE , Color.BLACK , Color.YELLOW }; // 初期値
1388 if( shapeColors != null && shapeColors.length > 0 ) {
1389 for( int i=0; i<shapeColors.length; i++ ) {
1390 shCols[i] = shapeColors[i];
1391 }
1392 }
1393 cplot.setSeriesPaint( serNo, shCols[0] ); // 針ã?色
1394 cplot.setSeriesOutlinePaint( serNo, shCols[1] ); // 針ã?æž??色
1395 cplot.setRoseCenterPaint( shCols[2] ); // æ–?—盤の中å¿??
1396 cplot.setRoseHighlightPaint( shCols[3] ); // æ–?—盤のæ–?—ã?æž?‰²
1397 cplot.setRosePaint( shCols[4] ); // æž??塗りつぶし色
1398
1399 cplot.addDataset( (ValueDataset)dataset );
1400
1401 return cplot;
1402 }
1403
1404 /**
1405 * HybsNumberAxis にオーバã?ライドすã‚?時間を表示する DecimalFormat のå†?ƒ¨クラスを定義しますã?
1406 *
1407 * これは、ChartPlot_XY で使用する、HybsNumberAxis に対して、拡張しますã?
1408 * ãƒ??タがã?時刻を表すå?合ã?Date型ã?オブジェクトを利用して、org.jfree.chart.axis.PeriodAxis
1409 * を利用できればよいのですが、単なる数字で扱ってã�?‚‹ケースがありã?時刻にå†?ƒ¨çš?�«
1410 * 変換するケースで使ã�?�¾すã?
1411 * 外部から与える数字ã?ã€??続してã�?‚‹å¿?¦�があるためã€?¼‘0é?数ですã?
1412 * たとえã?ã€?700 â†?17:00 , 2150 â†?21:30 とã�?�†感じですã?
1413 * 24時間をè¶?�ˆるå?合ã?ã€?
1414 * Type1:そã?ままã€?:00 に戻るã?
1415 * Type2:そã?ままã€?4:00 と、そのまま、加算されてã�?��ã€?
1416 * の?’種類が用意されてã�?�¾すã?
1417 *
1418 * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1419 *
1420 */
1421 private static final class HybsTimeFormat extends DecimalFormat {
1422 /** For serialization. */
1423 private static final long serialVersionUID = 201205075512L ;
1424
1425 private final boolean is24repeat ;
1426 private final boolean useDay ;
1427
1428 private final int hsCode ;
1429
1430 /**
1431 * コンストラクター
1432 *
1433 * 引数に、時刻を表すå?合ã?表現の仕方を指定しますã?
1434 * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1435 * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1436 * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1437 * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1438 * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1439 * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1440 *
1441 * @param type 時刻の表示方æ³?[E1/E2/E3/H1/H2/H3]
1442 */
1443 public HybsTimeFormat( final String inType ) {
1444 super();
1445
1446 DecimalFormatSymbols sym = new DecimalFormatSymbols();
1447 if( "E1".equals( inType ) ) {
1448 applyPattern( "#0.00" );
1449 sym.setDecimalSeparator( ':' );
1450 is24repeat = false; useDay = false;
1451 }
1452 else if( "E2".equals( inType ) ) {
1453 applyPattern( "#0.00" );
1454 sym.setDecimalSeparator( ':' );
1455 is24repeat = true; useDay = false;
1456 }
1457 else if( "E3".equals( inType ) ) {
1458 applyPattern( "#,#0.00" );
1459 sym.setDecimalSeparator( ':' );
1460 sym.setGroupingSeparator( ' ' );
1461 is24repeat = true; useDay = true;
1462 }
1463 else if( "H1".equals( inType ) ) {
1464 applyPattern( "#0.00� );
1465 sym.setDecimalSeparator( 'æ™? );
1466 is24repeat = false; useDay = false;
1467 }
1468 else if( "H2".equals( inType ) ) {
1469 applyPattern( "#0.00� );
1470 sym.setDecimalSeparator( 'æ™? );
1471 is24repeat = true; useDay = false;
1472 }
1473 else if( "H3".equals( inType ) ) {
1474 applyPattern( "#,#0.00� );
1475 sym.setDecimalSeparator( 'æ™? );
1476 sym.setGroupingSeparator( '日' );
1477 is24repeat = true; useDay = true;
1478 }
1479 else {
1480 String errMsg = "timeFormatType はã€?E1/E2/E3/H1/H2/H3) からæŒ?®šしてください。timeFormatType=[" + inType + "]" ;
1481 throw new HybsSystemException( errMsg );
1482 }
1483 setDecimalFormatSymbols( sym );
1484
1485 hsCode = super.hashCode() + Boolean.valueOf(is24repeat).hashCode() + Boolean.valueOf(useDay).hashCode();
1486 }
1487
1488 /**
1489 * double をフォーマットしてæ–?—å?を作æ?しまã�? format(double,StringBuffer,FieldPosition) のオーバã?ライãƒ?)
1490 *
1491 * timeFormatType によって、データの処ç�?�Œ変わりますã?
1492 * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1493 * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1494 * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1495 * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1496 * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1497 * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1498 *
1499 * @param number フォーマットすã‚?double
1500 * @param result ãƒ?‚ストを追åŠ?�™る位置
1501 * @param fieldPos 入力では、å¿?¦�であれば位置合わせフィールドã? 出力では、その位置合わせフィールドã?オフセãƒ?ƒˆ
1502 * @return フォーマットされた数値æ–?—å?
1503 */
1504 public StringBuffer format( final double number, final StringBuffer result, final FieldPosition fieldPos ) {
1505 int day = (int)(number/100/24); // 日付ã?端数はåˆ?‚Š捨てるã?
1506 int hour = (int)(number/100); // 時間のみ取り出すã?
1507 if( is24repeat ) { hour = hour%24; } // ?’4時間をè¶?�ˆたå?合ã?余りのみ使用するã€?
1508
1509 int minute = (int)((number%100)*0.6); // 0.6 = 60/100 の事ã?100 ã�?60åˆ?となるã?
1510
1511 double timeVal = hour + minute/100.0 ;
1512 if( useDay ) { timeVal = timeVal + day*100 ; } // 端数をå?り捨てた日付に対してã€?00倍しておくã€?
1513 return super.format( timeVal, result, fieldPos );
1514 }
1515
1516 /**
1517 * こã?オブジェクトとæŒ?®šされたオブジェクトを比è¼?�—ますã?
1518 *
1519 * @og.rev 5.5.2.4 (2012/05/16) 新規追åŠ?findbug対å¿?
1520 *
1521 * @param anObject 比è¼?�•れるオブジェクãƒ?
1522 * @return æŒ?®šされたオブジェクトが等しã�??合ã? true、そã�?�§なã�??合ã? false
1523 */
1524 public boolean equals( final Object anObject ) {
1525 return this == anObject;
1526 }
1527
1528 /**
1529 * こã?オブジェクトã?ハッシュコードを取得しますã?
1530 *
1531 * @og.rev 5.5.2.4 (2012/05/16) 新規追åŠ?findbug対å¿?
1532 *
1533 * @return ハッシュコーãƒ?
1534 */
1535 public int hashCode() {
1536 return hsCode;
1537 }
1538 }
1539
1540 /**
1541 * こã?オブジェクトã?æ–?—å?表現を返しますã?
1542 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1543 *
1544 * @return こã?クラスのæ–?—å?表現
1545 */
1546 @Override
1547 public String toString() {
1548 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1549
1550 rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
1551 rtn.append( "chartType [" ).append( chartType ).append( "]" ).append( HybsSystem.CR );
1552 rtn.append( "valueLabel [" ).append( valueLabel ).append( "]" ).append( HybsSystem.CR );
1553 rtn.append( "markValues [" ).append( Arrays.toString( markValues ) ).append( "]" ).append( HybsSystem.CR );
1554 rtn.append( "markColors [" ).append( Arrays.toString( markColors ) ).append( "]" ).append( HybsSystem.CR );
1555 rtn.append( "lowerBound [" ).append( lowerBound ).append( "]" ).append( HybsSystem.CR );
1556 rtn.append( "upperBound [" ).append( upperBound ).append( "]" ).append( HybsSystem.CR );
1557 rtn.append( "useGradient [" ).append( useGradient ).append( "]" ).append( HybsSystem.CR );
1558 rtn.append( "shapesVisible [" ).append( shapesVisible ).append( "]" ).append( HybsSystem.CR );
1559 rtn.append( "useDottedLine [" ).append( useDottedLine ).append( "]" ).append( HybsSystem.CR );
1560
1561 return rtn.toString();
1562 }
1563 }