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