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