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