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.chart.plot.ValueMarker; 037 import org.jfree.chart.axis.NumberAxis; 038 import org.jfree.chart.axis.NumberTickUnit; 039 import org.jfree.chart.renderer.category.CategoryItemRenderer; 040 import org.jfree.chart.renderer.category.BarRenderer; 041 import org.jfree.chart.renderer.category.LineAndShapeRenderer; 042 import org.jfree.chart.labels.CategoryItemLabelGenerator; 043 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; 044 import org.jfree.chart.urls.CategoryURLGenerator; 045 import org.jfree.ui.RectangleInsets; 046 import org.jfree.ui.TextAnchor; 047 048 /** 049 * ChartDataset は、Dataset および、JFreeChart の個別属?を管?て???タ管?ラスです? 050 * JFreeChart のグラフ合成機?のための、?別のグラフ描画属?を管?て?す? 051 * ??、引数の???JFreeChart の?ブジェクトへの変換なども行って?す? 052 * 053 * @version 0.9.0 2007/06/21 054 * @author Kazuhiko Hasegawa 055 * @since JDK1.1, 056 */ 057 public class ChartDataset { 058 059 private Dataset dataset = null; // Dataset オブジェク? 060 private String query = null; // 実行クエリー 061 private String chartType = null; // チャート?種? 062 private boolean baseLegend = true; // シリーズ単位?凡?の表示可否 063 private String valueLabel = null; 064 private double[] markValues = null; // doubleの配? 065 private Color[] markColors = new Color[] { Color.RED }; // Colorの配? 066 private Color[] markOverColors = null; // 4.0.3.0 (2008/01/07) マ?カーラインの?色 067 private boolean useMarkAnchor = true; // 4.1.1.0 (2008/02/04) 設定?をラベル表示するかど? 068 private int dynamicOCNo = -1; // 4.1.1.0 (2008/02/04) 動的なマ?カーラインの基準シリーズ番号 069 private int dynamicOCadrs = -1; // 4.1.1.0 (2008/02/21) 動的なマ?カーラインの基準番号 070 private String lowerBound = null; // double 071 private String upperBound = null; // double 072 private String tickSize = null; // double 4.0.3.0 (2008/01/07) 073 private boolean useGradient = false; 074 private boolean shapesVisible = true; 075 private Color[] shapeColors = null; // 4.0.3.0 (2008/01/07) ??タ毎にShapeを?り替える時?色?? 076 private String shapeScale = null; // 4.1.1.0 (2008/02/04) 基本形 Shape の表示倍率(double) 077 private boolean useDottedLine = false; 078 private Color[] seriesColors = null; // シリーズに対応した色?? 079 private boolean isLabelsVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のラベルを表示するかど? 080 private boolean isMarksVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のマ?カーを表示するかど? 081 private boolean isItemValVisible= false; // 4.1.1.0 (2008/02/04) ??タの値(itemText)を表示するかど? 082 private boolean isItemLastVisible= false; // 4.1.2.0 (2008/03/12) ??タの値(itemText)で??み表示するかど? 083 private boolean useItemLabelSep = true; // 4.1.2.0 (2008/03/12) ??タの値(itemText)の表示に桁区??を使用するかど? 084 private String barWidth = null; // 4.0.3.0 (2008/01/07) バ??double) 085 private String maxBarWidth = null; // 4.0.2.0 (2007/12/20) バ????値(0.0??.0) 086 // private double chartOffset = 0.0; // 4.1.1.0 (2008/02/04) グラフ?書き?し位置(double) 087 private String itemMargin = null; // 4.0.2.0 (2007/12/20) バ?アイ?のマ?ジン(0.0??.0) 088 private String visibleLimit = null; // 4.0.3.0 (2008/01/07) 表示下限値(これ以下???タは未表示) 089 private String valueInset = null; // 4.0.3.0 (2008/01/07) 縦軸表示領域INSET値 090 private double domainMargin = 0.0; // 4.1.1.0 (2008/02/14) グラフ?書き?し位置の調整比率 091 092 private String timeFormatType = null; // 5.5.2.1 (2012/05/07) 時刻の表示方?E1/E2/E3/H1/H2/H3) 093 private boolean useVerticalLabels = false; // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書?false/縦書?true) 094 095 /** 096 * Connection と query ??から、Dataset オブジェクトを作?します? 097 * 098 * setChartType( String ) で?されたチャートタイプに応じて、Datasetオブジェク? 099 * を構築します? 100 * Dataset クラスは?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX の?? 101 * ChartFactory クラスのチャートタイプ変換表に基づ?求めます? 102 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です? 103 * ※ Value は、conn ?sql を使用して?せん。?は、markValues を使用して?す? 104 * これは、現状の暫定方法であり、今後?変わる可能性があります? 105 * 106 * @og.rev 4.0.0.0 (2007/11/28) new Double(double) ?Double.valueOf(double) 変更 107 * 108 * @param conn Datasetの取得?のコネクション 109 * @param sql 取得するクエリー?? 110 */ 111 public void makeDataset( final Connection conn,final String sql ) throws SQLException { 112 dataset = ChartFactory.newDataset( conn,sql,chartType ); 113 query = sql ; 114 115 // 暫定的対応?本当?、SQL を実行してそ?値をセ?すべ? 116 if( dataset instanceof DefaultValueDataset ) { 117 if( markValues != null && markValues.length > 0 ) { 118 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) ); 119 } 120 else { 121 String errMsg = "markValues が指定されて?せん?; 122 throw new HybsSystemException( errMsg ); 123 } 124 } 125 } 126 127 /** 128 * DBTableModelオブジェクトから?Dataset オブジェクトを作?します? 129 * 130 * setChartType( String ) で?されたチャートタイプに応じて、Datasetオブジェク? 131 * を構築します? 132 * 133 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です? 134 * ※ Value は、DBTableModel を使用して?せん。?は、markValues を使用して?す? 135 * これは、現状の暫定方法であり、今後?変わる可能性があります? 136 * 137 * @og.rev 5.3.0.0 (2010/12/01) 新規追? 138 * 139 * @param table Datasetの取得?の??ブルモ? 140 */ 141 public void makeDataset( final DBTableModel table ) { 142 dataset = ChartFactory.newDataset( table,chartType ); 143 144 // 暫定的対応?本当?、SQL を実行してそ?値をセ?すべ? 145 if( dataset instanceof DefaultValueDataset ) { 146 if( markValues != null && markValues.length > 0 ) { 147 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) ); 148 } 149 else { 150 String errMsg = "markValues が指定されて?せん?; 151 throw new HybsSystemException( errMsg ); 152 } 153 } 154 } 155 156 /** 157 * NumberAxis オブジェクトを作?します? 158 * 159 * NumberAxis オブジェクト?、Value(縦軸)の属?を設定する為に使用され? 160 * オブジェクトです? 161 * これに、各種属?を設定して、?を返します? 162 * 属?としては、isLineVisible、isLabelsVisible、isMarksVisible? 163 * range(lowerBound、upperBound) です? 164 * 165 * @og.rev 4.0.2.0 (2007/12/20) 新規追? 166 * @og.rev 4.0.3.0 (2008/01/07) 縦軸レンジを?別設定?チック?? 167 * @og.rev 4.1.1.0 (2008/02/04) HybsNumberAxis 採用 168 * @og.rev 4.1.1.0 (2008/02/04) setAxisLineVisible を?isMarksVisible 値で設定する? 169 * @og.rev 5.5.2.1 (2012/05/07) timeFormatType 、useVerticalLabels 属?を追?る? 170 * 171 * @return 縦軸の属?(NumberAxisオブジェク? 172 */ 173 protected NumberAxis makeNumberAxis() { 174 NumberAxis axis = new HybsNumberAxis( valueLabel ); 175 176 // 縦軸レンジ??軸設? 177 if( lowerBound != null ) { 178 axis.setLowerBound( Double.parseDouble( lowerBound ) ); 179 } 180 181 if( upperBound != null ) { 182 axis.setUpperBound( Double.parseDouble( upperBound ) ); 183 } 184 185 if( tickSize != null ) { 186 axis.setTickUnit( new NumberTickUnit( Double.parseDouble( tickSize ) ) ); 187 } 188 189 axis.setTickLabelsVisible( isLabelsVisible ); 190 axis.setTickMarksVisible ( isMarksVisible ); 191 axis.setAxisLineVisible ( isMarksVisible ); // 4.1.1.0 (2008/02/04) 192 193 if( valueInset != null ) { 194 double rightInset = Double.parseDouble( valueInset ); 195 RectangleInsets base = axis.getTickLabelInsets(); 196 RectangleInsets inset = new RectangleInsets( 197 base.getUnitType(), // UnitType unitType 198 base.getTop(), // double top 199 base.getLeft(), // double left 200 base.getBottom(), // double bottom 201 base.getRight() + rightInset // double right 202 ); 203 axis.setTickLabelInsets( inset ) ; 204 } 205 206 // 5.5.2.1 (2012/05/07) 時刻の表示方?E1/E2/E3/H1/H2/H3) 207 if( timeFormatType != null ) { 208 axis.setNumberFormatOverride( new HybsTimeFormat( timeFormatType ) ); 209 } 210 211 // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書?false/縦書?true) 212 if( useVerticalLabels ) { 213 axis.setVerticalTickLabels( true ); // 処?には冗長? 214 } 215 216 return axis; 217 } 218 219 /** 220 * 検索を行う クエリー??を返します? 221 * 222 * これは、makeDataset( Connection ,String ) メソ?で?した? 223 * sql 属?の設定?そ?も?です? 224 * 225 * @return 取得するクエリー?? 226 */ 227 public String getQuery() { return query; } 228 229 /** 230 * Dataset オブジェクトを取得します? 231 * 232 * makeDataset( Connection,String ) で、予めオブジェクトを構築しておく 233 * ?があります? 234 * Dataset クラスは?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX の?? 235 * ChartFactory クラスのチャートタイプ変換表に基づ?求めます? 236 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です? 237 * 238 * @return Datasetオブジェク? 239 * @see #makeDataset( Connection ,String ) 240 */ 241 protected Dataset getDataset() { return dataset; } 242 243 /** 244 * Dataset オブジェクトを作?する時?チャートタイプを?します? 245 * 246 * チャートタイ?は、外部からチャートを?する?に便利なように、キー? 247 * されて?す?こ?キーに基づ?、ChartFactory クラスの 248 * チャートタイプ変換表に基づ?、レン?ー????タセ?を作?します? 249 * 250 * @param type チャートタイ? 251 */ 252 public void setChartType( final String type ) { 253 if( type != null && type.length() > 0 ) { 254 chartType = type; 255 } 256 } 257 258 /** 259 * Dataset オブジェクトを作?する時?チャートタイプを取得します? 260 * 261 * チャートタイ?は、外部からチャートを?する?に便利なように、キー? 262 * されて?す?こ?キーに基づ?、ChartFactory クラスの 263 * チャートタイプ変換表に基づ?、レン?ー????タセ?を作?します? 264 * 265 * @return チャートタイ? 266 */ 267 protected String getChartType() { return chartType; } 268 269 /** 270 * シリーズ単位?凡?の表示可否を設定します? 271 * 272 * @param baseLeg シリーズ単位?凡?の表示可否 273 */ 274 public void setBaseLegend( final boolean baseLeg ) { 275 baseLegend = baseLeg; 276 } 277 278 /** 279 * Renderer 関連の共通インターフェースを返します? 280 * 281 * setChartType( String )で設定された、チャートタイプに応じた?レン?ー? 282 * 返します? 283 * 対応表は、ChartFactory クラスに持って?す? 284 * 基本?は、チャートタイ?は、この、レン?ー名称から決定して?す? 285 * 286 * @og.rev 4.1.1.0 (2008/02/04) useDynamicOC , isItemValVisible , shapeScale 属?追? 287 * @og.rev 4.1.1.0 (2008/02/04) クリ?ブル・マップ?設定を移動?serNo 引数追? 288 * @og.rev 4.1.1.0 (2008/02/04) 返す型を CategoryItemRenderer に変更 289 * @og.rev 4.1.1.0 (2008/02/16) HybsStackedBarRenderer に domainMargin を設? 290 * @og.rev 4.1.1.0 (2008/02/19) Shapes の設定をこちらに移動? 291 * @og.rev 4.1.2.0 (2008/03/12) isItemLastVisible の設? 292 * 293 * @param serNo シリアルNo 294 * @param urlGen CategoryURLGeneratorオブジェク? 295 * 296 * @return レン?ーの共通インターフェース 297 * @see org.jfree.chart.renderer.category.CategoryItemRenderer 298 * @see org.jfree.chart.renderer.xy.XYItemRenderer 299 */ 300 protected CategoryItemRenderer getRenderer( final int serNo , final CategoryURLGenerator urlGen ) { 301 TypeRenderer typeRen = ChartFactory.getTypeRenderer( chartType ); 302 CategoryItemRenderer rend = (CategoryItemRenderer)typeRen.getRenderer(); 303 304 // 4.1.1.0 (2008/02/19) LineAndShapeRenderer オブジェクト?場合?設? 305 if( rend instanceof LineAndShapeRenderer ) { 306 LineAndShapeRenderer lsRend = (LineAndShapeRenderer)rend; 307 308 // シェー?四?表示。serNo ??表示は、?別に行います? 309 lsRend.setBaseShapesVisible( shapesVisible ); 310 if( serNo >= 0 ) { 311 lsRend.setSeriesShapesVisible( serNo,true ); 312 } 313 314 // 4.1.1.0 (2008/02/04) 繰返しshapeの開始番号(初期値:?? 315 ShapeList shapeList = new ShapeList(); 316 for( int i=0; i<shapeList.size(); i++ ) { 317 lsRend.setSeriesShape( i,shapeList.getShape(i) ); 318 } 319 } 320 321 // 4.0.3.0 (2008/01/07) HybsLineRenderer 特別処? 322 if( rend instanceof HybsLineRenderer ) { 323 HybsLineRenderer hyRend = (HybsLineRenderer)rend ; 324 if( shapeColors != null ) { 325 hyRend.setShapeColors( shapeColors ); 326 } 327 328 // 4.1.1.0 (2008/02/04) shapeの大きさの倍率(初期値:null) 329 hyRend.setShapeScale( shapeScale ); 330 331 // 縦軸マ?カーの?時Shape色??未使用時? null) 332 if( markOverColors != null ) { 333 hyRend.setValueMarkOverColors( getValueMarkOverColors(),dynamicOCNo ); 334 } 335 336 // 表示下限値(これ以下???タは未表示)の値(double)を指? 337 if( visibleLimit != null ) { 338 hyRend.setVisibleLimit( Double.valueOf( visibleLimit ) ); 339 } 340 } 341 342 // 4.0.2.0 (2007/12/20) BarRenderer オブジェクト?場合にマ?ジン等を設定します? 343 if( rend instanceof BarRenderer ) { 344 BarRenderer barRend = (BarRenderer)rend ; 345 346 // 棒?間を表示領域を1として小数点以下?数値で?設定す?0.0??.0) 347 if( itemMargin != null ) { 348 double margin = Double.parseDouble( itemMargin ); 349 barRend.setItemMargin( margin ) ; 350 } 351 352 // 棒??設定す?示領域を1として小数点以下?数値で?設定す?0.0??.0) 353 if( maxBarWidth != null ) { 354 barRend.setMaximumBarWidth( Double.parseDouble( maxBarWidth ) ) ; 355 } 356 } 357 358 // 4.1.1.0 (2008/02/16) HybsStackedBarRenderer オブジェクト?場合に domainMargin を設定します? 359 if( rend instanceof HybsStackedBarRenderer ) { 360 HybsStackedBarRenderer stBarRend = (HybsStackedBarRenderer)rend ; 361 362 stBarRend.setDomainMargin( domainMargin ) ; 363 } 364 365 // シリーズ単位?凡?の表示可否 366 rend.setBaseSeriesVisibleInLegend( baseLegend ); 367 368 // 4.1.1.0 (2008/02/04) ??タの値(itemText)を表示するかど? 369 if( isItemValVisible ) { 370 // CategoryItemLabelGenerator labelGen = new StandardCategoryItemLabelGenerator(); 371 372 // 4.1.2.0 (2008/03/12) 桁区??を使用するかど? 373 NumberFormat numForm = NumberFormat.getInstance(); 374 numForm.setGroupingUsed( useItemLabelSep ); 375 376 CategoryItemLabelGenerator labelGen 377 = new StandardCategoryItemLabelGenerator( 378 StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING, 379 numForm 380 ); 381 rend.setBaseItemLabelGenerator( labelGen ); 382 383 if( serNo >= 0 ) { 384 rend.setSeriesItemLabelsVisible( serNo,true ); 385 } 386 else { 387 rend.setBaseItemLabelsVisible( true ); 388 } 389 // 4.1.1.0 (2008/02/04) 動的なマ?カーラインを使用する場合? 390 // ??番号は閾値なので、表示しません? 391 if( dynamicOCNo >= 0 ) { 392 rend.setSeriesItemLabelsVisible( dynamicOCNo,false ); // 閾値 393 } 394 395 // 4.1.2.0 (2008/03/12) isItemLastVisible の設? 396 if( isItemLastVisible && rend instanceof HybsDrawItem ) { 397 ((HybsDrawItem)rend).setItemLabelLastVisible( true ) ; 398 } 399 } 400 401 // クリ?ブル・マッ? 402 if( urlGen != null ) { 403 if( serNo >= 0 ) { 404 rend.setSeriesItemURLGenerator( serNo,urlGen ); 405 } 406 else { 407 rend.setBaseItemURLGenerator( urlGen ); 408 } 409 } 410 411 return rend; 412 } 413 414 /** 415 * 縦軸の表示名称を指定します? 416 * 417 * @param valLbl 縦軸の表示名称 418 */ 419 public void setValueLabel( final String valLbl ) { 420 if( valLbl != null && valLbl.length() > 0 ) { 421 valueLabel = valLbl; 422 } 423 } 424 425 /** 426 * 縦軸の表示名称を取得します? 427 * 428 * @return 縦軸の表示名称 429 */ 430 protected String getValueLabel() { return valueLabel; } 431 432 /** 433 * マ?カーラインの設定?配?を指定します? 434 * 435 * ??値にマ?カーラインを引きます? 436 * 色は、setMarkColor( String ) で?します? 437 * markColors と、あわせて設定する?があります? 438 * markColorsが??されて???合?、Color.RED で マ?カーされます? 439 * dynamicOCNo を使用する場合?、そのValues の並びの?に? 440 * "G" と???を設定して下さ?? 441 * 例?000,G 基準1??000の直線?基準2?、グラ?と?意味? 442 * 443 * @og.rev 4.1.1.0 (2008/02/21) 基準ラインにグラフを使用する場合?位置?? 444 * 445 * @param mkVal マ?カーラインの設定?配? 446 * @see #setMarkColors( String[] ) 447 */ 448 public void setMarkValues( final String[] mkVal ) { 449 if( mkVal != null && mkVal.length > 0 ) { 450 int size = mkVal.length; 451 markValues = new double[size]; 452 for( int i=0; i<size; i++ ) { 453 if( "G".equals( mkVal[i] ) ) { 454 dynamicOCadrs = i; 455 markValues[i] = 0.0; 456 } 457 else { 458 markValues[i] = Double.parseDouble( mkVal[i] ); 459 } 460 } 461 } 462 } 463 464 /** 465 * マ?カーラインの色を?列指定します? 466 * 467 * マ?カーラインとは、縦軸設定?ラインの事で、縦軸の設定?(markValues)に 468 * 横方向にラインを付与します?こ?ラインの色を?カンマ区?形式で 469 * ?します? 470 * markValues と、あわせて設定する?があります? 471 * 個数が異なる?合?、markValues が優先され?無??場合?、Color.REDで 472 * 表示されます? 473 * 474 * <pre> 475 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 476 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) 477 * #XXXXXX形式?16bitRGB表?でも指定可能です? 478 * </pre> 479 * 480 * @param mkCol マ?カーラインの色配? 481 * @see java.awt.Color#BLACK 482 * @see #setMarkValues( String[] ) 483 */ 484 public void setMarkColors( final String[] mkCol ) { 485 if( mkCol != null && mkCol.length > 0 ) { 486 int size = mkCol.length; 487 markColors = new Color[size]; 488 for( int i=0; i<size; i++ ) { 489 markColors[i] = StringUtil.getColorInstance( mkCol[i] ); 490 } 491 } 492 } 493 494 /** 495 * マ?カーライン描画時に、その設定?を表示します? 496 * 497 * マ?カーラインの縦軸の設定?(markValues)に、設定?をラベル表示します? 498 * 位置は、TextAnchor.BASELINE_LEFT 固定です? 499 * 初期値は、表示する(true)です? 500 * 501 * @og.rev 4.1.1.0 (2008/02/04) 新規追? 502 * 503 * @param useAnchor true:設定?を表示する? 504 */ 505 public void setUseMarkAnchor( final boolean useAnchor ) { 506 useMarkAnchor = useAnchor ; 507 } 508 509 /** 510 * マ?カーラインの?時?Shape色をカンマ区?形式で??します? 511 * 512 * HybsLine でのみ使用可能です? 513 * マ?カーラインを使用する場合に、そのラインを?な?、?る色を指定します? 514 * こ?色の??、?ーカーラインの色??ーカーラインの設定?の個数?1に 515 * なります?つまり?色?:設定??:色?:設定??:色??となります? 516 * 色??、設定??より小さ??合に使用され、色??、設定??より大きく? 517 * 設定??より小さ??合?色??、設定??より大きい場合になります? 518 * 519 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します? 520 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 521 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます? 522 * また?#XXXXXX形式?16bitRGB表?でも指定可能です? 523 * markValues と、あわせて設定する?があります? 524 * どちらかが??されて???合?、?ーカー表示されません? 525 * <pre> 526 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 527 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) 528 * #XXXXXX形式?16bitRGB表?でも指定可能です? 529 * </pre> 530 * 531 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 532 * 533 * @param ovCol マ?カーラインの?時?Shape色 534 * @see java.awt.Color#BLACK 535 */ 536 public void setMarkOverColors( final String[] ovCol ) { 537 if( ovCol != null && ovCol.length > 0 ) { 538 int size = ovCol.length; 539 markOverColors = new Color[size]; 540 for( int i=0; i<size; i++ ) { 541 markOverColors[i] = StringUtil.getColorInstance( ovCol[i] ); 542 } 543 } 544 } 545 546 /** 547 * マ?カーラインの?時?Shape色を規定するオブジェクトを返します? 548 * 549 * HybsLine でのみ使用可能です? 550 * 設定情報が存在しな??合?、null を返します? 551 * 552 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 553 * @og.rev 4.1.1.0 (2008/02/04) markColors 属?追? 554 * @og.rev 4.1.1.1 (2008/02/25) markValues での "G" ?を?? 555 * 556 * @return マ?カーラインの?時?Shape色管?ブジェク? 557 */ 558 private ValueMarkOverColors getValueMarkOverColors() { 559 ValueMarkOverColors vmoc = null; 560 561 if( markValues != null && markOverColors != null && 562 markValues.length + 1 == markOverColors.length && 563 markValues.length >= 1 ) { 564 int dynAdrs = (dynamicOCadrs >= 0) ? dynamicOCadrs : 0 ; 565 566 vmoc = new ValueMarkOverColors( 567 markValues, 568 markOverColors, 569 markColors[dynAdrs], 570 dynamicOCadrs 571 ); 572 } 573 574 return vmoc ; 575 } 576 577 /** 578 * 動的なマ?カーラインの基準シリーズ番号を設定しま?初期値:-1)? 579 * 580 * 動的なマ?カーラインを使用する場合?、基準?となるシリーズ番号を指定します? 581 * 582 * マ?カーラインの?位閾値に相当します?これは、グラフ化されますが? 583 * Shape は自動的に削除されます? 584 * こ?設定を使用する場合???の??タには、?Shapeが付きます?それ以外? 585 * ??タに、Shape を付けるかど?は、shapesVisible 属?で?します? 586 * こ?線?色は、markColors で?した??位?色になります?また? 587 * markValues で?した??位?値は、使用されません。た?、色?? 588 * 関係上?設定しておく?があります? 589 * また?isValueVisible == true で、設定?の値表示を行う場合も、最下位? 590 * 値は表示しな??します? 591 * 初期値は、使用しな?-1)です? 592 * 593 * @og.rev 4.1.1.0 (2008/02/04) 新規追? 594 * @og.rev 4.1.1.0 (2008/02/19) setUseDynamicOC ?setDynamicOCNo 595 * 596 * @param ocNo 動的なマ?カーラインの基準シリーズ番号 597 */ 598 public void setDynamicOCNo( final int ocNo ) { 599 dynamicOCNo = ocNo; 600 } 601 602 /** 603 * マ?カーラインの ValueMarker オブジェクト?列を返します? 604 * 605 * マ?カーライン は、markValues(double配?) と markColors(Color配?) 606 * より、ValueMarker オブジェクトを??次配?化して?ます? 607 * useMarkAnchor == true の場合?、設定?(markValues) の Anchor ? 608 * 表示します?位置は、TextAnchor.BASELINE_LEFT 固定です? 609 * dynamicOCNo が指定された場合?、最下位?閾値は使用しません? 610 * 611 * @og.rev 4.1.1.0 (2008/02/04) useMarkAnchor 属?追? 612 * @og.rev 4.1.1.0 (2008/02/04) 動的なオーバ?カラー useDynamicOC 属?追? 613 * 614 * @return マ?カーラインのオブジェクト??not null) 615 * @see java.awt.Color#BLACK 616 * @see #setMarkValues( String[] ) 617 * @see #setMarkColors( String[] ) 618 * @see #setUseMarkAnchor( boolean ) 619 */ 620 protected ValueMarker[] getValueMarkers() { 621 List<ValueMarker> markerList = new ArrayList<ValueMarker>(); 622 int size = (markValues == null) ? 0 : markValues.length; 623 for( int i=0; i<size; i++ ) { 624 if( i != dynamicOCadrs ) { 625 ValueMarker marker = new ValueMarker( markValues[i] ); 626 marker.setPaint( markColors[i] ); 627 if( useMarkAnchor ) { 628 marker.setLabel( String.valueOf( markValues[i] ) ); 629 marker.setLabelTextAnchor( TextAnchor.BASELINE_LEFT ); 630 } 631 markerList.add( marker ); 632 } 633 } 634 635 return markerList.toArray( new ValueMarker[markerList.size()] ); 636 } 637 638 /** 639 * チャート?縦軸の??をセ?しま?初期値:自動計?? 640 * 641 * 何も?しな??合?、データの??から、?動的に計算します? 642 * 643 * @param lowBnd 縦軸の?? 644 * @see #setUpperBound( String ) 645 */ 646 public void setLowerBound( final String lowBnd ) { 647 if( lowBnd != null && lowBnd.length() > 0 ) { 648 lowerBound = lowBnd; 649 } 650 } 651 652 /** 653 * チャート?縦軸の?値をセ?しま?初期値:自動計?? 654 * 655 * 何も?しな??合?、データの?値から、?動的に計算します? 656 * 657 * @param upBnd 縦軸の?値 658 * @see #setLowerBound( String ) 659 */ 660 public void setUpperBound( final String upBnd ) { 661 if( upBnd != null && upBnd.length() > 0 ) { 662 upperBound = upBnd; 663 } 664 } 665 666 /** 667 * チャート?縦軸の目盛??セ?しま?初期値:自動計?? 668 * 669 * 何も?しな??合?、データの?から、?動的に計算します? 670 * 671 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 672 * 673 * @param size 縦軸のチック(目?の? 674 */ 675 public void setTickSize( final String size ) { 676 if( size != null && size.length() > 0 ) { 677 tickSize = size; 678 } 679 } 680 681 /** 682 * バ?チャート?グラ??ション処?行うかど?[true/false]をセ?しま?初期値:true)? 683 * 684 * 通常のバ?チャート?、単?表示で表されますが、これにグラ??ション効果を 685 * 付加するかど?を指定します? 686 * 通常のバ?チャートが、少しきれ?見えます? 687 * 初期値は、true(グラ??ション効果を付与す?です? 688 * 689 * @param useGrad グラ??ション処?[true:する/false:しない] 690 */ 691 public void setUseGradient( final boolean useGrad ) { 692 useGradient = useGrad; 693 } 694 695 /** 696 * バ?チャート?グラ??ション処?行うかど?を取得します? 697 * 698 * 通常のバ?チャート?、単?表示で表されますが、これにグラ??ション効果を 699 * 付加するかど?を指定します? 700 * 通常のバ?チャートが、少しきれ?見えます? 701 * 初期値は、false(使用しな?です? 702 * 703 * @return グラ??ション処?する:true/しな?false) 704 * @see #setUseGradient( boolean ) 705 */ 706 protected boolean isUseGradient() { return useGradient; } 707 708 /** 709 * ラインチャート?ポイントを四角表示するかど?を指定しま?初期値:false)? 710 * 711 * ラインチャート???常、線?で表され、各ポイントにつ?も?線?で接続されます? 712 * shapesVisible ?true に設定すると、各ポイントが、線上に四角く表示され? 713 * そ?ポイント?位置を?容易に判断出来るよ?なります? 714 * 初期値は、?ーカーを?れません? 715 * 716 * @param shVisible ポイントを四角表示するかど? 717 */ 718 public void setShapesVisible( final boolean shVisible ) { 719 shapesVisible = shVisible; 720 } 721 722 /** 723 * ラインチャート?ポイントを四角表示するかど?を取得します? 724 * 725 * ラインチャート???常、線?で表され、各ポイントにつ?も?線?で接続されます? 726 * shapesVisible ?true に設定すると、各ポイントが、線上に四角く表示され? 727 * そ?ポイント?位置を?容易に判断出来るよ?なります? 728 * 初期値は、?ーカーを?れません? 729 * 730 * @return ポイントを四角表示するかど? 731 * @see #setShapesVisible( boolean ) 732 */ 733 protected boolean isShapesVisible() { return shapesVisible; } 734 735 /** 736 * ??タ毎にShapeを?り替える時?色の繰返しパターンを文字?配?で?します? 737 * 738 * HybsLine でのみ使用可能です? 739 * これは、データそ?も?が?繰返し性のある場合に、その繰返し性に対応し? 740 * 形状のShape を表示させる?合に使用します? 741 * 繰返しShapeの形状は、JFreeChart のシリーズ毎?繰返し標準形状を使用します? 742 * 現在のバ?ジョンでは?0?までの繰返しに対応可能です? 743 * 繰返し色を??した????に使用されて?ます? 744 * 745 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します? 746 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 747 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます? 748 * また?#XXXXXX形式?16bitRGB表?でも指定可能です? 749 * 750 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 751 * 752 * @param colors ??タ毎?色の繰返しパターン(??配?) 753 * @see java.awt.Color#BLACK 754 */ 755 public void setShapeColors( final String[] colors ) { 756 if( colors != null && colors.length > 0 ) { 757 int size = colors.length; 758 shapeColors = new Color[size]; 759 for( int i=0; i<size; i++ ) { 760 shapeColors[i] = StringUtil.getColorInstance( colors[i] ); 761 } 762 } 763 } 764 765 /** 766 * shapeの大きさを??定で変更しま?初期値:null)? 767 * 768 * ラインチャート?Shape(?ラフ?ポイント?マ?カー)の大きさは??常は? 769 * 自動設定されます? 770 * こ?大きさを?倍率?で、変更可能です? 771 * ??、double 型です? 772 * 初期値は、null は、スケール変更しません(自動設定?ままの大きさ) 773 * 774 * @og.rev 4.1.1.0 (2008/02/04) 新規追? 775 * 776 * @param scale shapeの大きさの倍率 777 */ 778 public void setShapeScale( final String scale ) { 779 shapeScale = scale; 780 } 781 782 /** 783 * ラインチャート?線をドットラインにするかど?を指定しま?初期値:false)? 784 * 785 * ラインチャート???常、線?で表されます? 786 * これに、点線で表すことで、グラフ?違いを?色?でなく形状でも識別 787 * しやすくすることが可能です? 788 * 初期値は、線?です? 789 * 790 * @param useDotLine ドットラインにするかど? 791 */ 792 public void setUseDottedLine( final boolean useDotLine ) { 793 useDottedLine = useDotLine; 794 } 795 796 /** 797 * ラインチャート?線をドットラインにするかど?を取得します? 798 * 799 * ラインチャート???常、線?で表されます? 800 * これに、点線で表すことで、グラフ?違いを?色?でなく形状でも識別 801 * しやすくすることが可能です? 802 * 初期値は、線?です? 803 * 804 * @return ドットラインにするかど? 805 * @see #setUseDottedLine( boolean ) 806 */ 807 protected boolean isUseDottedLine() { return useDottedLine; } 808 809 /** 810 * ?チャート描画時?チャート色の繰返しパターンを文字?配?で?します? 811 * 812 * 通常、?のチャートを同時に表示させる?合?、縦軸が?通であれば? 813 * ?回のSelect????タを取得します? 814 * こ?、データをシリーズと呼んでおり、これを区別する為に、色を?けます? 815 * 初期値は、JFreeChart が?動で割り振ります? 816 * これを?外部からCVS形式で、カンマ区?で色コードを?します? 817 * ?データが多い場合?、多い??色は使用されません。少な??合?? 818 * ?に繰り返して使用されます? 819 * 例えば?色??した?合?、すべてのシリーズが同じ色で表されます? 820 * 821 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します? 822 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 823 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます? 824 * また?#XXXXXX形式?16bitRGB表?でも指定可能です? 825 * 826 * @param colors チャート色の繰返しパターン(??配?) 827 * @see java.awt.Color#BLACK 828 */ 829 public void setSeriesColors( final String[] colors ) { 830 if( colors != null && colors.length > 0 ) { 831 int size = colors.length; 832 seriesColors = new Color[size]; 833 for( int i=0; i<size; i++ ) { 834 seriesColors[i] = StringUtil.getColorInstance( colors[i] ); 835 } 836 } 837 } 838 839 /** 840 * ?チャート描画時?チャート色の繰返しパターンをColor配?で?します? 841 * 842 * @return チャート色の繰返しパターン(Color配?) 843 * @see #setSeriesColors( String[] ) 844 */ 845 protected Color[] getSeriesColors() { 846 return seriesColors ; 847 } 848 849 /** 850 * Value(縦軸)のラベルを表示するかど?を指定しま?初期値:true[表示する])? 851 * 852 * ValueAxis にて設定される、縦軸??の、ラベルを表示するかど??します? 853 * 初期値は、true(表示する)です? 854 * 855 * @og.rev 4.0.2.0 (2007/12/20) 新規追? 856 * 857 * @param labelsVisible Value(縦軸)のラベルを表示するかど? 858 */ 859 public void setValueLabelsVisible( final boolean labelsVisible ) { 860 isLabelsVisible = labelsVisible; 861 } 862 863 /** 864 * Value(縦軸)のマ?カーを表示するかど?を指定しま?初期値:true[表示する])? 865 * 866 * ValueAxis にて設定される、縦軸??の、?ーカーを表示するかど??します? 867 * 初期値は、true(表示する)です? 868 * 869 * @og.rev 4.0.2.0 (2007/12/20) 新規追? 870 * 871 * @param marksVisible Value(縦軸)のマ?カーを表示するかど? 872 */ 873 public void setValueMarksVisible( final boolean marksVisible ) { 874 isMarksVisible = marksVisible; 875 } 876 877 /** 878 * ??タの値(itemText)を表示するかど?[true/false/last]を指定しま?初期値:false[表示しない])? 879 * 880 * CategoryItemRenderer 関連のグラフ?設定?をグラフ上に表示するかど?? 881 * ?します? 882 * true に設定した?合?通常の場合?、すべてのシリーズにラベル表示されます? 883 * false に設定すると、表示されません? 884 * last を設定すると、各シリーズの??値のみ表示されます? 885 * ChartCreate クラスに、seriesPikup が設定されて?場合?、指定?シリーズ 886 * のみの設定?を表示し?他?値は、表示しません? 887 * 同様に、dynamicOCNo が指定されて?場?動的なマ?カーライン) 888 * ??シリーズは?値として使用されるため?設定?は表示されません? 889 * ラベルの表示位置は、表示する線グラフ?傾きに応じてラベルの表示場? 890 * 変えます?山形、右坂?谷形、左?に応じて、上中、下右、下中、上右 に 891 * 位置を設定します?右にずらす?は?0 ピクセル固定です? 892 * 初期値は、false(表示しな?です? 893 * 894 * @og.rev 4.1.1.0 (2008/02/04) 新規追? 895 * @og.rev 4.1.2.0 (2008/03/12) ??のまま、受け取りるように変更 896 * 897 * @param visible ??タの値の表示のさせ方 [true/false/last] 898 * @see ChartCreate#setSeriesPikup( int ) 899 */ 900 public void setItemLabelVisible( final String visible ) { 901 if( "true".equalsIgnoreCase( visible ) ) { 902 isItemValVisible = true; 903 } 904 else if( "last".equalsIgnoreCase( visible ) ) { 905 isItemValVisible = true; 906 isItemLastVisible = true; 907 } 908 else if( visible != null && !"false".equalsIgnoreCase( visible ) ) { 909 String errMsg = "itemLabelVisible は、?true,false,last」から指定してください?" 910 + visible + "]"; 911 throw new HybsSystemException( errMsg ); 912 } 913 } 914 915 /** 916 * ??タの値(itemText)の表示に桁区??を使用するかど?を指定します? 917 * 918 * itemLabelVisible=true 時に、表示されるデータ値ラベルで? 919 * NumberFormat して?すが?桁区???123,456,789.0) の 920 * 区?記号を表示するかど?を指定します? 921 * true を指定すると、表示します?false では、表示しません? 922 * 初期値は、true(使用する)です? 923 * 924 * @og.rev 4.1.2.0 (2008/03/12) 新規追? 925 * 926 * @param used 桁区??を使用するかど? 927 */ 928 public void setUseItemLabelSep( final boolean used ) { 929 useItemLabelSep = used; 930 } 931 932 /** 933 * 縦軸の表示領域INSET値(double)を指定します? 934 * 935 * 縦軸?表示領域(NumberAxis)の??追??を設定します? 936 * これは??常の表示領域の左側にスペ?スを挿入します? 937 * あくまで、追?る?なので、文字?長さ?含まれません? 938 * 何も?しな??合?、設定しません? 939 * 940 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 941 * 942 * @param inset Value(縦軸)の表示領域INSET値 943 */ 944 public void setValueInset( final String inset ) { 945 valueInset = inset; 946 } 947 948 /** 949 * BOXチャート?バ??double)を指定します? 950 * 951 * BOXチャート?バ??double)を指定します? 952 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ? 953 * 使用した描画のみです? 954 * 棒グラフ?バ??定?、直接、CategoryItemRendererState に設定して?す? 955 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用?比率で?します? 956 * 何も?しな??合?、設定しません? 957 * 958 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 959 * 960 * @param width BOXチャート?バ??double) 961 */ 962 public void setBarWidth( final String width ) { 963 barWidth = width; 964 } 965 966 /** 967 * BOXチャート?バ??double)を取得します? 968 * 969 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ? 970 * 使用した描画のみです? 971 * 棒グラフ?バ??定?、直接、CategoryItemRendererState に設定して?す? 972 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用?比率で?します? 973 * 何も?しな??合?、設定しません? 974 * 975 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 976 * 977 * @return BOXチャート?バ??double)の?? 978 */ 979 protected String getBarWidth() { 980 return barWidth ; 981 } 982 983 /** 984 * BOXチャート?バ????値(0.0??.0)を指定します? 985 * 986 * BOXチャート?バ???比率の?値を指定します? 987 * 表示領域を1として小数点以下?数値で棒??設定します? 988 * 設定した?無?ある時?適当なサイズに調整されます? 989 * (小さくしたときには棒が線?ようにな? 990 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ? 991 * 使用した描画のみです? 992 * 何も?しな??合?、設定しません? 993 * 994 * @og.rev 4.0.2.0 (2007/12/20) 新規追? 995 * 996 * @param barWidth BOXチャート?バ????値(0.0??.0) 997 */ 998 public void setBarMaxWidth( final String barWidth ) { 999 maxBarWidth = barWidth; 1000 } 1001 1002 /** 1003 * BOXチャート?バ?アイ?のマ?ジン(0.0??.0)を指定します? 1004 * 1005 * BOXチャート?バ?アイ?のマ?ジンの比率を指定します? 1006 * 棒?間を表示領域を1として小数点以下?数値で?設定します? 1007 * 無?ある時?適当なサイズに調整されます? 1008 * barMaxWidth より優先されます? 1009 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ? 1010 * 使用した描画のみです? 1011 * 何も?しな??合?、設定しません? 1012 * 1013 * @og.rev 4.0.2.0 (2007/12/20) 新規追? 1014 * 1015 * @param margin BOXチャート?バ?アイ?のマ?ジン(0.0??.0) 1016 */ 1017 public void setBarItemMargin( final String margin ) { 1018 itemMargin = margin; 1019 } 1020 1021 /** 1022 * 表示下限値(これ以下???タは未表示)の値(double)を指定します? 1023 * 1024 * HybsLine でのみ使用可能です? 1025 * こ?設定?以下???タは、存在しな??します? 1026 * Lineを引くとき?こ???タと、存在して???タ間にラインは引かれません? 1027 * 何も?しな??合?、設定しません? 1028 * 1029 * @og.rev 4.0.3.0 (2008/01/07) 新規追? 1030 * 1031 * @param limit 表示下限値(これ以下???タは未表示) 1032 */ 1033 public void setVisibleLimit( final String limit ) { 1034 visibleLimit = limit; 1035 } 1036 1037 /** 1038 * グラフ?書き?し位置の調整比率を指定します? 1039 * 1040 * グラフを描画する場合?、書き?し位置を少しずらします? 1041 * これは、グラフ??対して、比率で?します? 1042 * 0.0(初期値)の場合?、?期描画位置である、CategoryAnchor.Middle と 1043 * 同じ?から、書き?されます? 1044 * 1.0 の場合?中?ら?グラフ??半?が加算され?END位置に?ます? 1045 * 同様に?1.0 の場合?、グラフ??半?が減算され?START 位置になります? 1046 * つまり?中?ら?グラフ??半?単位で、前方/後方にずらす事が出来ます? 1047 * 書き?し位置 ??中?Middle) + (domainMargin)???? 1048 * 初期値は?.0(真ん中:MIDDLE)です? 1049 * 1050 * @og.rev 4.1.1.0 (2008/02/14) 新規追? 1051 * 1052 * @param margin グラフ?書き?し位置の調整比率 1053 */ 1054 public void setDomainMargin( final double margin ) { 1055 domainMargin = margin; 1056 } 1057 1058 /** 1059 * 時刻を表す?合?表現の仕方を指定しま?初期値:null)? 1060 * 1061 * HybsNumberAxis にオーバ?ライドす?時間を表示する DecimalFormat の?クラスを利用するに当たり? 1062 * 時刻の表示方法を?します? 1063 * 外部から与える数字???続して??があるため?0?数です? 1064 * たとえ??700 ?17:00 , 2150 ?21:30 と?感じです? 1065 * 2400 を?ると日付違?なります? 1066 * 1067 * 英語表?:)と日本語表??の区別と?4時間を?る?合?表示方法によって?種類?パターンが存在します? 1068 * ?1:そ?まま?4:00 となり??されて?? 1069 * ?2:そ?まま?:00 に戻る?(日付?無? 1070 * ?3:そ?まま? 00:00 と日付が付与される? 1071 * ?1:そ?まま?4?0?となり??されて?? 1072 * ?2:そ?まま?0?0?に戻る?(日付?無? 1073 * ?3:そ?まま?日 00?0?と日付が付与される? 1074 * 初期値は、使用しな?-1)です? 1075 * 1076 * @og.rev 5.5.2.1 (2012/05/07) 新規追? 1077 * 1078 * @param type 時刻の表示方?[E1/E2/E3/H1/H2/H3] 1079 */ 1080 public void setTimeFormatType( final String type ) { 1081 timeFormatType = type; 1082 } 1083 1084 /** 1085 * ラベルの表示向きを縦にするかど?[true/false]を指定しま?初期値:false)? 1086 * 1087 * ChartCreate の rotationLabel は、角度を指定できましたが?NumberAxis では? 1088 * 縦にするかど?の?しかできません? 1089 * ここでは、true を指定するとラベルは、縦書きになります? 1090 * 初期値は、false(横書?です? 1091 * 1092 * @og.rev 5.5.2.1 (2012/05/07) 新規追? 1093 * 1094 * @param useVLavels ラベルの表示向き [false:横書?:true:縦書き] 1095 */ 1096 public void setUseVerticalLabels( final boolean useVLavels ) { 1097 useVerticalLabels = useVLavels; 1098 } 1099 1100 /** 1101 * HybsNumberAxis にオーバ?ライドす?時間を表示する DecimalFormat の?クラスを定義します? 1102 * 1103 * これは、ChartPlot_XY で使用する、HybsNumberAxis に対して、拡張します? 1104 * ??タが?時刻を表す?合?Date型?オブジェクトを利用して、org.jfree.chart.axis.PeriodAxis 1105 * を利用できればよいのですが、単なる数字で扱って?ケースがあり?時刻に?? 1106 * 変換するケースで使?す? 1107 * 外部から与える数字???続して??があるため?0?数です? 1108 * たとえ??700 ?17:00 , 2150 ?21:30 と?感じです? 1109 * 24時間を?る?合?? 1110 * Type1:そ?まま?:00 に戻る? 1111 * Type2:そ?まま?4:00 と、そのまま、加算されて?? 1112 * の?種類が用意されて?す? 1113 * 1114 * @og.rev 5.5.2.1 (2012/05/07) 新規追? 1115 * 1116 */ 1117 private static final class HybsTimeFormat extends DecimalFormat { 1118 /** For serialization. */ 1119 private static final long serialVersionUID = 201205075512L; 1120 1121 private final boolean is24repeat ; 1122 private final boolean useDay ; 1123 1124 private final int hsCode ; 1125 1126 /** 1127 * コンストラクター 1128 * 1129 * 引数に、時刻を表す?合?表現の仕方を指定します? 1130 * ?1:そ?まま?4:00 となり??されて?? 1131 * ?2:そ?まま?:00 に戻る?(日付?無? 1132 * ?3:そ?まま? 00:00 と日付が付与される? 1133 * ?1:そ?まま?4?0?となり??されて?? 1134 * ?2:そ?まま?0?0?に戻る?(日付?無? 1135 * ?3:そ?まま?日 00?0?と日付が付与される? 1136 * 1137 * @param type 時刻の表示方?[E1/E2/E3/H1/H2/H3] 1138 */ 1139 public HybsTimeFormat( final String inType ) { 1140 super(); 1141 1142 DecimalFormatSymbols sym = new DecimalFormatSymbols(); 1143 if( "E1".equals( inType ) ) { 1144 applyPattern( "#0.00" ); 1145 sym.setDecimalSeparator( ':' ); 1146 is24repeat = false; useDay = false; 1147 } 1148 else if( "E2".equals( inType ) ) { 1149 applyPattern( "#0.00" ); 1150 sym.setDecimalSeparator( ':' ); 1151 is24repeat = true; useDay = false; 1152 } 1153 else if( "E3".equals( inType ) ) { 1154 applyPattern( "#,#0.00" ); 1155 sym.setDecimalSeparator( ':' ); 1156 sym.setGroupingSeparator( ' ' ); 1157 is24repeat = true; useDay = true; 1158 } 1159 else if( "H1".equals( inType ) ) { 1160 applyPattern( "#0.00? ); 1161 sym.setDecimalSeparator( '? ); 1162 is24repeat = false; useDay = false; 1163 } 1164 else if( "H2".equals( inType ) ) { 1165 applyPattern( "#0.00? ); 1166 sym.setDecimalSeparator( '? ); 1167 is24repeat = true; useDay = false; 1168 } 1169 else if( "H3".equals( inType ) ) { 1170 applyPattern( "#,#0.00? ); 1171 sym.setDecimalSeparator( '? ); 1172 sym.setGroupingSeparator( '日' ); 1173 is24repeat = true; useDay = true; 1174 } 1175 else { 1176 String errMsg = "timeFormatType は?E1/E2/E3/H1/H2/H3) から?してください。timeFormatType=[" + inType + "]" ; 1177 throw new HybsSystemException( errMsg ); 1178 } 1179 setDecimalFormatSymbols( sym ); 1180 1181 hsCode = super.hashCode() + Boolean.valueOf(is24repeat).hashCode() + Boolean.valueOf(useDay).hashCode(); 1182 } 1183 1184 /** 1185 * double をフォーマットして??を作?しま? format(double,StringBuffer,FieldPosition) のオーバ?ライ?) 1186 * 1187 * timeFormatType によって、データの処?変わります? 1188 * ?1:そ?まま?4:00 となり??されて?? 1189 * ?2:そ?まま?:00 に戻る?(日付?無? 1190 * ?3:そ?まま? 00:00 と日付が付与される? 1191 * ?1:そ?まま?4?0?となり??されて?? 1192 * ?2:そ?まま?0?0?に戻る?(日付?無? 1193 * ?3:そ?まま?日 00?0?と日付が付与される? 1194 * 1195 * @param number フォーマットす?double 1196 * @param result ?ストを追?る位置 1197 * @param fieldPos 入力では、?であれば位置合わせフィールド? 出力では、その位置合わせフィールド?オフセ? 1198 * @return フォーマットされた数値?? 1199 */ 1200 public StringBuffer format( final double number, final StringBuffer result, final FieldPosition fieldPos ) { 1201 int day = (int)(number/100/24); // 日付?端数は?捨てる? 1202 int hour = (int)(number/100); // 時間のみ取り出す? 1203 if( is24repeat ) { hour = hour%24; } // ?4時間を?た?合?余りのみ使用する? 1204 1205 int minute = (int)((number%100)*0.6); // 0.6 = 60/100 の事?100 ?60?となる? 1206 1207 double timeVal = hour + minute/100.0 ; 1208 if( useDay ) { timeVal = timeVal + day*100 ; } // 端数を?り捨てた日付に対して?00倍しておく? 1209 return super.format( timeVal, result, fieldPos ); 1210 } 1211 1212 /** 1213 * こ?オブジェクトと?されたオブジェクトを比?ます? 1214 * 1215 * @og.rev 5.5.2.4 (2012/05/16) 新規追?findbug対? 1216 * 1217 * @param anObject 比?れるオブジェク? 1218 * @return ?されたオブジェクトが等し??合? true、そ?な??合? false 1219 */ 1220 public boolean equals( final Object anObject ) { 1221 return this == anObject; 1222 } 1223 1224 /** 1225 * こ?オブジェクト?ハッシュコードを取得します? 1226 * 1227 * @og.rev 5.5.2.4 (2012/05/16) 新規追?findbug対? 1228 * 1229 * @return ハッシュコー? 1230 */ 1231 public int hashCode() { 1232 return hsCode; 1233 } 1234 } 1235 1236 /** 1237 * こ?オブジェクト???表現を返します? 1238 * 基本???目?使用します? 1239 * 1240 * @return こ?クラスの??表現 1241 */ 1242 @Override 1243 public String toString() { 1244 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 1245 1246 rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR ); 1247 rtn.append( "chartType [" ).append( chartType ).append( "]" ).append( HybsSystem.CR ); 1248 rtn.append( "valueLabel [" ).append( valueLabel ).append( "]" ).append( HybsSystem.CR ); 1249 rtn.append( "markValues [" ).append( Arrays.toString( markValues ) ).append( "]" ).append( HybsSystem.CR ); 1250 rtn.append( "markColors [" ).append( Arrays.toString( markColors ) ).append( "]" ).append( HybsSystem.CR ); 1251 rtn.append( "lowerBound [" ).append( lowerBound ).append( "]" ).append( HybsSystem.CR ); 1252 rtn.append( "upperBound [" ).append( upperBound ).append( "]" ).append( HybsSystem.CR ); 1253 rtn.append( "useGradient [" ).append( useGradient ).append( "]" ).append( HybsSystem.CR ); 1254 rtn.append( "shapesVisible [" ).append( shapesVisible ).append( "]" ).append( HybsSystem.CR ); 1255 rtn.append( "useDottedLine [" ).append( useDottedLine ).append( "]" ).append( HybsSystem.CR ); 1256 1257 return rtn.toString(); 1258 } 1259 }