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.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.fukurou.util.StringUtil; 021import org.opengion.fukurou.util.HybsDateUtil; // 5.9.16.2 (2017/1/28) (6.7.3.0 (2017/01/27)) 022 023import java.util.List; 024import java.awt.Color; 025import java.text.SimpleDateFormat; 026import java.util.Calendar; // 5.9.16.2 (2017/1/28) (6.7.3.0 (2017/01/27)) 027 028import org.jfree.ui.RectangleEdge; 029import org.jfree.chart.JFreeChart; 030import org.jfree.chart.plot.Plot; 031import org.jfree.chart.plot.PlotOrientation; 032import org.jfree.chart.plot.CategoryPlot; 033import org.jfree.chart.renderer.category.CategoryItemRenderer; 034import org.jfree.data.category.CategoryDataset; 035import org.jfree.chart.axis.CategoryAxis; 036import org.jfree.chart.axis.CategoryLabelPositions; 037import org.jfree.chart.axis.CategoryAnchor; 038import org.jfree.chart.axis.DateAxis; // 5.6.1.0 (2013/02/01) 039import org.jfree.chart.axis.SegmentedTimeline; // 5.9.16.2 (2017/1/28) (6.7.3.0 (2017/01/27)) 040import org.jfree.chart.plot.DatasetRenderingOrder; 041import org.jfree.chart.plot.CategoryMarker; 042 043/** 044 * ChartCreate は、JFreeChart オブジェクトを構築するクラスです。 045 * 複数の ChartDataset オブジェクトを合成することも、ここで行っています。 046 * グラフの種類は、ChartPlot_XXX クラスで設定しています。 047 * ここでは、簡易的にオブジェクトを構築できるように、チャートタイプの指定によって、 048 * 各種作成するオブジェクトを切り替えています。 049 * 050 * @version 0.9.0 2007/06/21 051 * @author Kazuhiko Hasegawa 052 * @since JDK1.1, 053 */ 054public class ChartCreate { 055 056 private String title = null; // タイトル 057 private String chartType = null; // チャートの種類 058 private String domainLabel = null; // チャートの共通横軸のラベル 059 private boolean showLegend = true; // 凡例 の表示可否 060 private RectangleEdge rectEdge= RectangleEdge.BOTTOM; // 凡例の表示箇所 061 private PlotOrientation plotOri = PlotOrientation.VERTICAL; // チャートの軸表示方向 062 private Color chartBackColor = null; // 背景色の設定 063 private Color plotBackColor = null; // 描画領域の設定 064 private int rotationLabel = 0; // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ ) 065 // CategoryAxis系は、rotationLabel。ValueAxis系(NumberAxis,DateAxis)は、useVerticalLabels で、ラベルの表示向きを指定します。 066 private boolean useVerticalLabels = false; // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true) 067 private String domainMarker = null; // 横軸のマーカーライン 068 private boolean useDomainLabel = true; // 横軸ラベルの表示有無 069 private boolean useMarkerLabel = true; // マーカーライン時の文字有無 070 private int seriesPikup = -1; // ピックアップするシリーズ番号 071 private HybsURLGenerator urlGen = null; // クリッカブル・マップ 072 // 4.0.2.0 (2007/12/20) 073 private String categoryMargin = null; // カテゴリマージン(0.0〜1.0) 074 private String lowerMargin = null; // 下方マージン(0.0〜1.0) 075 private String upperMargin = null; // 上方マージン(0.0〜1.0) 076 private boolean isDebug = false; // デバッグフラグ 077 private boolean useDomainLine = false; // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線) 078 private Color domainLineColor = null; // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色 079 private boolean useRangeLine = true; // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線) 080 private Color rangeLineColor = null; // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色 081 private int categorySkip = 1; // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔 082 private int categoryCutNo = -1; // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク 083 private int rangeSkip = 1; // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔 084 private boolean useToolTip = false; // 4.3.1.0 (2008/08/09) ツールチップスの利用 085 086 private CategoryAnchor categoryAnchor = null; // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 087 088 private List<ChartDataset> chartDataset = null; // チャートのデータ属性管理オブジェクトのリスト 089 090 private String dateAxisFormat = "MM/dd"; // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット 091 private SegmentedTimeline timeLine ; // 6.7.3.0 (2017/01/27) Time,XYTime Polt関係の時間軸を調整する SegmentedTimeline 092 093 094 /** 095 * JFreeChart オブジェクトを作成します。 096 * 097 * 内部的には、ChartPlot インターフェースに基づいた Plot を構築するクラスを 098 * 呼び出して、JFreeChart の引数に設定します。 099 * 各種属性の設定も行います。 100 * 101 * @return JFreeChartオブジェクト 102 */ 103 public JFreeChart getChart() { 104 105 ChartPlot chPlot = ChartFactory.newChartPlot( chartType ); 106 107 Plot plot = chPlot.getPlot( this ); 108 109 // 描画領域の設定 110 if( plotBackColor != null ) { 111 plot.setBackgroundPaint( plotBackColor ); 112 } 113 114 JFreeChart chart = new JFreeChart( title, JFreeChart.DEFAULT_TITLE_FONT, plot, showLegend ); 115 116 if( showLegend ) { 117 chart.getLegend().setPosition( rectEdge ); 118 } 119 120 // 背景色の設定 121 if( chartBackColor != null ) { 122 chart.setBackgroundPaint( chartBackColor ); 123 } 124 125 // 以降の処理では、変更イベントが発行される。 126 if( categoryAnchor != null && plot instanceof CategoryPlot ) { 127 ((CategoryPlot)plot).setDomainGridlinePosition( categoryAnchor ) ; 128 } 129 130 // 以降の処理では、変更イベントが発行される。 131 // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除 132// if( plot instanceof HybsCategoryPlot ) { 133// ((HybsCategoryPlot)plot).setNotify( true ) ; 134// } 135 136 return chart; 137 } 138 139 /** 140 * JFreeChart オブジェクトを変更します。 141 * 142 * すでに作成済みの JFreeChart に対して、 143 * シリーズのピックアップ(seriesPikup) のみ、変更します。 144 * 使用するのは、引数の JFreeChart と seriesPikup 属性値のみです。 145 * 146 * @og.rev 3.8.9.2 (2007/07/28) シリーズ指定時の色、シェープ対応 147 * 148 * @param chart JFreeChartオブジェクト 149 * @param serNo seriesPikup 属性値 150 * 151 * @return JFreeChartオブジェクト 152 */ 153 public static JFreeChart modifying( final JFreeChart chart,final int serNo ) { 154 155 CategoryPlot plot = chart.getCategoryPlot(); 156 157 if( plot instanceof HybsCategoryPlot ) { 158 // 以降の処理では、変更イベントは発行されない。 159 // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除 160// ((HybsCategoryPlot)plot).setNotify( false ) ; 161 ((HybsCategoryPlot)plot).setSeriesPikup( serNo ) ; 162 } 163 164 CategoryDataset dtset = plot.getDataset(); 165 int rowCnt = dtset.getRowCount(); // Series の個数 166 167 CategoryItemRenderer rend = plot.getRenderer(); 168 169 if( serNo >= 0 && serNo < rowCnt ) { 170 rend.setBasePaint( Color.CYAN ); 171 rend.setSeriesPaint( serNo, Color.RED ); 172 } 173 174 // 以降の処理では、変更イベントが発行される。 175 // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除 176// if( plot instanceof HybsCategoryPlot ) { 177// ((HybsCategoryPlot)plot).setNotify( true ) ; 178// } 179 180 return chart ; 181 } 182 183 /** 184 * CategoryPlotオブジェクトを返します。 185 * 186 * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、 187 * CategoryPlotオブジェクトを構築します。 188 * 必要な属性設定は、済んでいる状態です。 189 * ここでは、serNo、categoryAxis、plotOrientation、useDomainLine、 190 * domainLineColor、useRangeLine 、RangeLineColor 、rangeSkip 、 191 * domainMarker を設定しておきます。 192 * 193 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 194 * 195 * @return 必要な属性を設定済みのCategoryPlotオブジェクト 196 */ 197 protected HybsCategoryPlot makeCategoryPlot() { 198 HybsCategoryPlot cPlot = new HybsCategoryPlot( seriesPikup ); 199 200 cPlot.setOrientation( plotOri ); 201 cPlot.setDatasetRenderingOrder( DatasetRenderingOrder.FORWARD ); 202 203 // ドメイン(横軸)に対する、グリッドライン(垂直線)の指定 204 cPlot.setDomainGridlinesVisible( useDomainLine ); 205 if( domainLineColor != null ) { cPlot.setDomainGridlinePaint( domainLineColor ); } 206 207 // レンジ(縦軸)に対する、グリッドライン(水平線)の指定 208 cPlot.setRangeGridlinesVisible( useRangeLine ); 209 if( rangeLineColor != null ) { cPlot.setRangeGridlinePaint( rangeLineColor ); } 210 211 // 4.1.1.0 (2008/02/04) 縦軸のグリッド線(水平線)をスキップする間隔の指定 212 cPlot.setRangeSkip( rangeSkip ); 213 214 // 横軸ドメインマーカーの設定(縦ライン) 215 if( domainMarker != null ) { 216 CategoryMarker catMk = new CategoryMarker( domainMarker ); 217 catMk.setDrawAsLine( true ); 218 if( useMarkerLabel ) { 219 catMk.setLabel( domainMarker ); 220 } 221 cPlot.addDomainMarker( catMk ); 222 } 223 224 return cPlot ; 225 } 226 227 /** 228 * CategoryAxisオブジェクトを返します。 229 * 230 * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、 231 * CategoryAxisオブジェクトを構築します。 232 * 必要な属性設定は、済んでいる状態です。 233 * ここでは、domainLabel、categoryMargin、lowerMargin、upperMargin、 234 * useDomainLabel、rotationLabel を設定しておきます。 235 * 236 * @og.rev 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク追加(categoryCutNo) 237 * 238 * @return 必要な属性を設定済みの CategoryAxisオブジェクト 239 */ 240 protected CategoryAxis makeCategoryAxis() { 241 CategoryAxis categoryAxis = new HybsCategoryAxis( 242 domainLabel,categorySkip,categoryCutNo 243 ); 244 245 // カテゴリマージン(0.0〜1.0)を指定します。 246 if( categoryMargin != null ) { 247 double ctMargin = Double.parseDouble( categoryMargin ); 248 categoryAxis.setCategoryMargin( ctMargin ) ; // double margin 249 } 250 251 // 下方マージン(0.0〜1.0)を指定します。 252 if( lowerMargin != null ) { 253 double lwMargin = Double.parseDouble( lowerMargin ); 254 categoryAxis.setLowerMargin( lwMargin ) ; // double margin 255 } 256 257 // 上方マージン(0.0〜1.0)を指定します。 258 if( upperMargin != null ) { 259 double upMargin = Double.parseDouble( upperMargin ); 260 categoryAxis.setUpperMargin( upMargin ) ; // double margin 261 } 262 263 // チャートのカテゴリーラベルの方向を指定します。 264 if( rotationLabel > 0 ) { 265 categoryAxis.setCategoryLabelPositions( 266 CategoryLabelPositions.createUpRotationLabelPositions( 267 Math.PI / rotationLabel )); 268 } 269 else if( rotationLabel < 0 ) { 270 categoryAxis.setCategoryLabelPositions( 271 CategoryLabelPositions.createDownRotationLabelPositions( 272 Math.PI / -rotationLabel )); 273 } 274 275 // 横軸ラベルの表示有無を返します。 276 categoryAxis.setVisible( useDomainLabel ); // ドメインラベルの表示有無 277 278 if( isDebug ) { 279 System.out.println( "CategoryMargin="+categoryAxis.getCategoryMargin()); 280 System.out.println( "LowerMargin="+categoryAxis.getLowerMargin()); 281 System.out.println( "UpperMargin="+categoryAxis.getUpperMargin()); 282 } 283 284 return categoryAxis ; 285 } 286 287 /** 288 * チャートのデータ属性管理オブジェクトのリストを設定します。 289 * 290 * ChartDataset オブジェクトは、内部チャートの個々の属性を管理しています。 291 * このオブジェクト は、グラフの合成に使用できるように、内部にそれぞれの Plot や 292 * renderer に対応する情報を持っています。 293 * これらを、複数管理するときに、List 管理していますので、そのList をセットします。 294 * JFreeChart には、この複数のChartDataset から、それぞれの Plot と Dataset を 295 * 順次、追加していく必要があります。その処理は、ChartPlot インターフェースを 296 * 継承した、サブクラスで実際に行われます。 297 * 298 * @param datasetList チャートのデータ属性管理のリスト 299 */ 300 public void setDatasetList( final List<ChartDataset> datasetList ) { 301 chartDataset = datasetList; 302 303 if( chartDataset != null ) { 304 ChartDataset firstChData = chartDataset.get(0); 305 chartType = firstChData.getChartType(); 306 } 307 } 308 309 /** 310 * チャートのデータ属性管理オブジェクトのリストを返します。 311 * 312 * @return チャートのデータ属性管理オブジェクトのリスト 313 * @see #setDatasetList( List ) 314 */ 315 protected List<ChartDataset> getDatasetList() { return chartDataset; } 316 317 /** 318 * チャートのタイトルを設定します。 319 * 320 * @param chTitle チャートのタイトル 321 */ 322 public void setTitle( final String chTitle ) { 323 title = chTitle; 324 } 325 326 /** 327 * チャートの共通横軸のラベルを設定します。 328 * 329 * @param domLabel チャートの共通横軸のラベル 330 */ 331 public void setDomainLabel( final String domLabel ) { 332 domainLabel = domLabel; 333 } 334 335 /** 336 * チャートの共通横軸のラベルを返します。 337 * 338 * @return チャートの共通横軸のラベル 339 */ 340 protected String getDomainLabel() { return domainLabel; } 341 342 /** 343 * 凡例 の表示可否を設定します。 344 * 345 * @param showLeg 凡例 の表示可否 346 */ 347 public void setShowLegend( final boolean showLeg ) { 348 showLegend = showLeg; 349 } 350 351 /** 352 * 凡例の表示箇所を設定します(TOP、BOTTOM、RIGHT、LEFT)。 353 * 354 * 表示箇所は、org.jfree.ui.RectangleEdge クラスの設定値を使用します。 355 * 指定できるのは、TOP、BOTTOM、RIGHT、LEFT で、各文字の頭一文字で 356 * 判定してます。つまり、T,B,R,L で、判定を行い、それ以外はエラーになります。 357 * 358 * @param edge 凡例の表示箇所(TOP、BOTTOM、RIGHT、LEFT) 359 */ 360 public void setRectangleEdge( final String edge ) { 361 if( edge != null && edge.length() > 0 ) { 362 char ope = edge.charAt(0); 363 switch( ope ) { 364 case 'T' : rectEdge = RectangleEdge.TOP; break; 365 case 'B' : rectEdge = RectangleEdge.BOTTOM;break; 366 case 'R' : rectEdge = RectangleEdge.RIGHT; break; 367 case 'L' : rectEdge = RectangleEdge.LEFT; break; 368 default : 369 String errMsg = "指定のパラメータは適用できません。[" + edge + "]" 370 + HybsSystem.CR 371 + "TOP,BOTTOM,RIGHT,LEFT の中から、指定してください。" ; 372 throw new HybsSystemException( errMsg ); 373 } 374 } 375 } 376 377 /** 378 * チャートの軸表示方向を設定します(VERTICAL、HORIZONTAL)。 379 * 380 * 軸表示方向は、org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 381 * 指定できるのは、VERTICAL、HORIZONTALで、各文字の頭一文字で 382 * 判定してます。つまり、V,H で、判定を行い、それ以外はエラーになります。 383 * 384 * @param orientation 凡例の表示箇所(VERTICAL、HORIZONTAL) 385 */ 386 public void setPlotOrientation( final String orientation ) { 387 if( orientation != null && orientation.length() > 0 ) { 388 char ope = orientation.charAt(0); 389 switch( ope ) { 390 case 'V' : plotOri = PlotOrientation.VERTICAL; break; 391 case 'H' : plotOri = PlotOrientation.HORIZONTAL;break; 392 default : 393 String errMsg = "指定のパラメータは適用できません。[" + orientation + "]" 394 + HybsSystem.CR 395 + "VERTICAL,HORIZONTAL の中から、指定してください。" ; 396 throw new HybsSystemException( errMsg ); 397 } 398 } 399 } 400 401 /** 402 * チャートの軸表示方向を返します。 403 * 404 * org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。 405 * 406 * @return チャートの軸表示方向(VERTICAL、HORIZONTAL) 407 */ 408 protected PlotOrientation getPlotOrientation() { return plotOri; } 409 410 /** 411 * チャートの背景色を指定します。 412 * 413 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 414 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 415 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 416 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 417 * 418 * @param chBackClr チャートの背景色 419 * @see java.awt.Color#BLACK 420 */ 421 public void setChartBackColor( final String chBackClr ) { 422 if( chBackClr != null && chBackClr.length() > 0 ) { 423 chartBackColor = StringUtil.getColorInstance( chBackClr ); 424 } 425 } 426 427 /** 428 * チャートの描画領域の色を指定します。 429 * 430 * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。 431 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY , 432 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。 433 * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。 434 * 435 * @param plBackClr チャートの描画領域色 436 * @see java.awt.Color#BLACK 437 */ 438 public void setPlotBackColor( final String plBackClr ) { 439 if( plBackClr != null && plBackClr.length() > 0 ) { 440 plotBackColor = StringUtil.getColorInstance( plBackClr ); 441 } 442 } 443 444 /** 445 * チャートのカテゴリーラベルの方向を指定します。 446 * 447 * これは、CategoryAxis 系の横軸ラベルに対して、表示方向を指定します。 448 * ValueAxis系(NumberAxis,DateAxis)は、setUseVerticalLabels( boolean ) で 449 * true:縦/false:横 のみ指定可能です。 450 * 451 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 452 * この指示数に相当する値を設定します。 453 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 454 * マイナスは、下方向に回転させます。 455 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 456 * 457 * @param rotLabel カテゴリーラベルの方向 458 * @see #setUseVerticalLabels( boolean ) 459 */ 460 public void setRotationLabel( final int rotLabel ) { 461 rotationLabel = rotLabel; 462 } 463 464 /** 465 * ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false)。 466 * 467 * これは、ValueAxis系(NumberAxis,DateAxis) 系の横軸ラベルに対して、表示方向を 468 * true:縦/false:横で、指定します。 469 * true に指定した場合で、かつ、rotationLabel が未指定(=0)の場合は、2:90度 も設定します。 470 * 471 * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis,DateAxis では、 472 * 縦にするかどうかの指定しかできません。 473 * ここでは、true を指定するとラベルは、縦書きになります。 474 * 初期値は、false(横書き)です。 475 * 476 * @og.rev 5.6.4.3 (2013/05/24) 新規追加 477 * 478 * @param useVLavels ラベルの表示向き [false:横書き/true:縦書き] 479 * @see #setRotationLabel( int ) 480 */ 481 public void setUseVerticalLabels( final boolean useVLavels ) { 482 useVerticalLabels = useVLavels; 483 484 // useVerticalLabels=true で、rotationLabel を 2:90度 に設定しておきます。 485 if( useVerticalLabels && rotationLabel == 0 ) { rotationLabel = 2; } 486 } 487 488 /** 489 * チャートのカテゴリーラベルの方向を取得します。 490 * 491 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 492 * この指示数に相当する値を設定します。 493 * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ・・・ 494 * マイナスは、した方向に回転させます。 495 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 496 * 497 * @return カテゴリーラベルの方向 498 * @see #setRotationLabel( int ) 499 */ 500 protected int getRotationLabel() { return rotationLabel; } 501 502 /** 503 * チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します。 504 * 505 * この属性には、マーカーラインを設定する値を記述します。 506 * 507 * @param marker ドメインのマーカーライン 508 */ 509 public void setDomainMarker( final String marker ) { 510 if( marker != null && marker.length() > 0 ) { 511 domainMarker = marker; 512 } 513 } 514 515 /** 516 * 横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true)。 517 * 518 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えにくくなります。 519 * そのようなケースで、横軸のラベルそのものを表示しない場合に、false を 520 * 設定します。 521 * 初期値は、表示する(true)です。 522 * 523 * @param flag 横軸ラベルの表示有無 [true:表示する/false:表示しない] 524 */ 525 public void setUseDomainLabel( final boolean flag ) { 526 useDomainLabel = flag ; 527 } 528 529 /** 530 * 横軸ラベルの表示有無を返します。 531 * 532 * @return boolean横軸ラベルの表示有無(true:表示する/false:表示しない) 533 */ 534 protected boolean isUseDomainLabel() { return useDomainLabel; } 535 536 /** 537 * マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true)。 538 * 539 * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えない場合があります。 540 * そのようなケースで、見たい値にマーカーラインを設定し、その横に、ドメインラベル 541 * を表示する事で、ピックアップしている軸の値を容易に知ることが可能です。 542 * 初期値は、表示する(true)です。 543 * 544 * @param flag マーカーラインの設定値表示 [true:表示する/false:表示しない] 545 */ 546 public void setUseMarkerLabel( final boolean flag ) { 547 useMarkerLabel = flag ; 548 } 549 550 /** 551 * 複数シリーズのピックアップを行う場合のシリーズ番号を指定します。 552 * 553 * 複数シリーズ(検索時に複数項目を同時に検索する場合)では、チャート上に 554 * 複数のグラフが表示されますが、その中の一つをピックアップする場合に、 555 * シリーズ番号を指定します。 556 * シリーズ番号は、0 から始まる数字です。 557 * ここでは、ピックアップされたシリーズは、赤色で表示されます。 558 * それ以外は、グレー色での表示になります。 559 * (※ 本来は、ChartDataset に持つべき属性です。) 560 * 561 * @param serPikup シリーズ番号 562 */ 563 public void setSeriesPikup( final int serPikup ) { 564 seriesPikup = serPikup; 565 } 566 567 /** 568 * 横軸ラベルをスキップする間隔を指定します。 569 * 570 * 横軸ラベル(カテゴリラベル表示)する際に、スキップする間隔を指定します。 571 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 572 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 573 * 初期値は、"1" (すべて表示)です。 574 * なお、先頭から表示を開始します。 575 * 576 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 577 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 578 * 579 * @param cateSkip ラベルをスキップする間隔を指定 580 * @see #setCategoryCutNo( int ) 581 */ 582 public void setCategorySkip( final int cateSkip ) { 583 categorySkip = cateSkip; 584 } 585 586 /** 587 * 横軸ラベルの文字位置指定のキーブレイクを指定します。 588 * 589 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 590 * 591 * 横軸ラベル(カテゴリラベル表示)する際に、ラベルの先頭から、この指定文字数だけ 592 * カットして、表示します。 593 * その際、前回作成したカットラベルと、同一ラベルの場合は、表示しません。 594 * 例えば、データは、年月日で、年と月のみ(先頭6文字)を指定すると、 595 * 日のデータは、ラベルが表示されません。 596 * 指定される数字は、1以上の整数としてください。 597 * 初期値は、すべて表示です。 598 * 599 * 注意:これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。 600 * また、categoryCutNo が指定された場合は、categorySkip は使用されません。 601 * 602 * @param cateCutNo キーブレイク位置 603 * @see #setCategorySkip( int ) 604 */ 605 public void setCategoryCutNo( final int cateCutNo ) { 606 if( cateCutNo > 0 ) { 607 categoryCutNo = cateCutNo; 608 } 609 } 610 611 /** 612 * 複数シリーズのピックアップを行う場合のシリーズ番号を取得します。 613 * 614 * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。 615 * この指示数に相当する値を設定します。 616 * 0 を指定した場合は、何も設定しません。(初期設定のまま) 617 * (※ 本来は、ChartDataset に持つべき属性です。) 618 * 619 * @return シリーズ番号 620 * @see #setSeriesPikup( int ) 621 */ 622 protected int getSeriesPikup() { return seriesPikup; } 623 624 /** 625 * 縦軸のグリッド線(水平線)をスキップする間隔を指定します。 626 * 627 * 縦軸のグリッド線を表示する際に、スキップする間隔を指定します。 628 * 通常は、ラベルと同じだけのグリッド線が掛かれますが、ラベルよりも 629 * 少ない数のグリッド線(例えば、2つおき)を出す場合に、値を設定します。 630 * "1" (初期値)では、1つづつ表示(つまり、すべて表示する)します。 631 * "2" とすると、1つおきに、"3" とすると、2つおきに表示します。 632 * 初期値は、"1" (すべて表示)です。 633 * なお、先頭から表示を開始します。 634 * 635 * @og.rev 4.1.1.0 (2008/02/04) 新規追加 636 * 637 * @param rngSkip 縦軸のグリッド線(水平線)をスキップする間隔 638 */ 639 public void setRangeSkip( final int rngSkip ) { 640 rangeSkip = rngSkip; 641 } 642 643 /** 644 * クリッカブル・マップ用URLを指定します。 645 * 646 * 画像に、クリッカブル・マップを作成する場合の、URL を指定します。 647 * これは、画像上にエリア指定でリンク引数を作成することが可能です。 648 * URL 自身は、? 付きで固定値の引数を連結することが可能です。 649 * クリックしたエリアのカテゴリやインデックスの値(引数)は、自動的に 650 * 設定されます。(指定しない場合はチャートによって異なります) 651 * <pre> 652 * ・Pie :category、pieIndex 653 * ・XY :series、item 654 * ・Category :series、category 655 * </pre> 656 * この引数の URL の名称を変更したい場合は、URL に続けて、カンマ(,) で、 657 * 名称を記述してください。 658 * 例:link.jsp,BLOCK 659 * 660 * @param imageMapUrl クリッカブル・マップ用URL 661 */ 662 public void setImageMapUrl( final String imageMapUrl ) { 663 if( imageMapUrl != null ) { 664 urlGen = new HybsURLGenerator( imageMapUrl ); 665 } 666 } 667 668 /** 669 * クリッカブル・マップ用URLを取得します。 670 * 671 * @return クリッカブル・マップ用URL 672 * @see #setImageMapUrl( String ) 673 */ 674 protected HybsURLGenerator getURLGenerator() { return urlGen; } 675 676 /** 677 * ツールチップス利用(true)利用しない(false)のフラグを取得します。 678 * 679 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 680 * @og.rev 4.9.9.9 (2009/08/07) メソッド名変更 681 * 682 * @return ツールチップス利用(true)利用しない(false)のフラグ 683 * @see #setUseToolTip( boolean ) 684 */ 685// protected boolean getUseToolTip() { return useToolTip; } 686 protected boolean isUseToolTip() { return useToolTip; } 687 688 /** 689 * カテゴリマージン(0.0〜1.0)を指定します。 690 * 691 * カテゴリ(グラフの横軸に相当)の表示間隔(マージン)の比率を指定します。 692 * この比率は、% ではなく、数字(double)での設定になります。 693 * 何も指定しない場合は、デフォルトで自動調整されます。 694 * 695 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 696 * 697 * @param margin カテゴリマージン(0.0〜1.0) 698 */ 699 public void setCategoryMargin( final String margin ) { 700 categoryMargin = margin; 701 } 702 703 /** 704 * 下方マージン(0.0〜1.0)を指定します。 705 * 706 * カテゴリ(グラフの横軸に相当)の下方側(左側)のマージンの比率を指定します。 707 * この比率は、% ではなく、数字(double)での設定になります。 708 * 何も指定しない場合は、デフォルトで自動調整されます。 709 * 710 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 711 * 712 * @param margin 下方マージン(0.0〜1.0) 713 */ 714 public void setLowerMargin( final String margin ) { 715 lowerMargin = margin; 716 } 717 718 /** 719 * 上方マージン(0.0〜1.0)を指定します。 720 * 721 * カテゴリ(グラフの横軸に相当)の上方側(右側)のマージンの比率を指定します。 722 * この比率は、% ではなく、数字(double)での設定になります。 723 * 何も指定しない場合は、デフォルトで自動調整されます。 724 * 725 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 726 * 727 * @param margin 上方マージン(0.0〜1.0) 728 */ 729 public void setUpperMargin( final String margin ) { 730 upperMargin = margin; 731 } 732 733 /** 734 * 横軸のグリッド表示有無(垂直線)を指定します(初期値:false)。 735 * 736 * ドメイン(横軸)に対する、グリッドラインを表示するかどうか指定します。 737 * 738 * 何も指定しない場合は、表示しません。(false) 739 * 740 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 741 * 742 * @param useLine 横軸のグリッド表示有無(垂直線) 743 */ 744 public void setUseDomainLine( final boolean useLine ) { 745 useDomainLine = useLine; 746 } 747 748 /** 749 * 横軸のグリッド線の色を指定します。 750 * 751 * ドメイン(横軸)に対する、グリッドラインの表示色を指定します。 752 * 何も指定しない場合は、デフォルトで自動設定されます。 753 * 754 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 755 * 756 * @param color 横軸のグリッド線の色 757 */ 758 public void setDomainLineColor( final String color ) { 759 if( color != null ) { 760 domainLineColor = StringUtil.getColorInstance( color ); 761 } 762 } 763 764 /** 765 * 縦軸のグリッド表示有無(水平線)を指定します(初期値:true)。 766 * 767 * レンジ(縦軸)に対する、グリッドラインを表示するかどうか指定します。 768 * 769 * 何も指定しない場合は、表示しません。(false) 770 * 771 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 772 * 773 * @param useLine 横軸のグリッド表示有無(垂直線) 774 */ 775 public void setUseRangeLine( final boolean useLine ) { 776 useRangeLine = useLine; 777 } 778 779 /** 780 * ツールチップスを利用(true)/利用しない(false)を指定します(初期値:false)。 781 * 782 * @og.rev 4.3.1.0 (2008/08/09) 新規追加 783 * 784 * @param toolTip ツールチップスを利用(true)/利用しない(false) 785 */ 786 public void setUseToolTip( final boolean toolTip ) { 787 useToolTip = toolTip; 788 } 789 790 /** 791 * 縦軸のグリッド線の色を指定します。 792 * 793 * レンジ(縦軸)に対する、グリッドラインの表示色を指定します。 794 * 何も指定しない場合は、デフォルトで自動設定されます。 795 * 796 * @og.rev 4.0.3.0 (2008/01/07) 新規追加 797 * 798 * @param color 縦軸のグリッド線の色 799 */ 800 public void setRangeLineColor( final String color ) { 801 if( color != null ) { 802 rangeLineColor = StringUtil.getColorInstance( color ); 803 } 804 } 805 806 /** 807 * 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)を指定します。 808 * 809 * 横軸のグリッド(垂直線)を、グラフのどの位置に記述するかを指定します。 810 * 具体的な値は、CategoryAnchor オブジェクトの値になります。 811 * ここでは、文字列で(START,MIDDLE,END)を指定します。(先頭一文字で判定) 812 * 何も指定しない場合は、デフォルト(MIDDLE)です。 813 * 814 * @og.rev 4.1.1.0 (2008/02/14) 新規追加 815 * 816 * @param anchor 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END) 817 */ 818 public void setCategoryAnchor( final String anchor ) { 819 if( anchor != null && anchor.length() > 0 ) { 820 char anc = anchor.charAt(0); 821 switch( anc ) { 822 case 'S' : categoryAnchor = CategoryAnchor.START; break; 823 case 'M' : categoryAnchor = CategoryAnchor.MIDDLE; break; 824 case 'E' : categoryAnchor = CategoryAnchor.END; break; 825 default : 826 String errMsg = "指定のAnchorは適用できません。[" + anchor + "]" 827 + HybsSystem.CR 828 + "START,MIDDLE,END の中から、指定してください。" ; 829 throw new HybsSystemException( errMsg ); 830 } 831 } 832 } 833 834 /** 835 * Time,XYTime Polt関係の時間軸で、SegmentedTimeline 関係の情報をセットします。 836 * 837 * segSizeは、分単位の数値です。日単位を指定する場合は、24*60 = 1440 を指定します。 838 * 0 または、何も指定しない場合は、その他の情報を使用しません。 (SegmentedTimeline を使用しません。) 839 * 840 * <pre> 841 * start time 842 * | 843 * v 844 * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 845 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+... 846 * | | | | | |EE|EE| | | | | |EE|EE| | | | | |EE|EE| 847 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+... 848 * [_____________] [___] [_] 849 * | | | 850 * included excluded segment 851 * segments segments size 852 * [___________________] 853 * | 854 * segment group 855 * </pre> 856 * 857 * @og.rev 5.9.16.2 (2017/1/28) 新規追加 (6.7.3.0 (2017/01/27)) 858 * 859 * @param segSize SegmentedTimelineのsegment size を、分単位で指定 860 * @param segIncluded SegmentedTimelineのincluded segments(スペース)を数値で指定 861 * @param segExcluded SegmentedTimelineのexcluded segments(EE)を数値で指定 862 * @param startTime SegmentedTimelineのStartTime(segment groupの開始位置) 863 */ 864 public void setSegmentedTimelineInfo( final int segSize , final int segIncluded , final int segExcluded , final String startTime ) { 865 if( segSize > 0 ) { 866 timeLine = new SegmentedTimeline( segSize * 60 * 1000 , segIncluded , segExcluded ); 867 if( startTime != null && startTime.length() >= 8 ) { 868 final Calendar cal = HybsDateUtil.getCalendar( startTime ); 869 timeLine.setStartTime( cal.getTimeInMillis() ); 870 } 871 } 872 } 873 874 /** 875 * Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します。 876 * 877 * TimeSeries 関連のデータを扱う場合の横軸の日付フォーマットを指定します。 878 * 日付フォーマットは、java.text.SimpleDateFormat で使われる yyyy/MM/dd HH:mm:ss 表記です。 879 * 880 * 初期値は、"MM/dd" です。 881 * 882 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 883 * 884 * @param dtFormat Time,XYTime Polt関係の時間軸を表す場合のフォーマット 885 */ 886 public void setDateAxisFormat( final String dtFormat ) { 887 if( dtFormat != null && dtFormat.length() > 0 ) { 888 dateAxisFormat = dtFormat; 889 } 890 } 891 892 /** 893 * Time,XYTime Polt関係の時間軸を表す DateAxis オブジェクトを返します。 894 * 895 * このオブジェクトは、domainLabel で名前付けされた DateAxis で、日付フォーマットは、 896 * dateAxisFormat で DateFormat を Override しています。 897 * 初期フォーマットは、"MM/dd" です。 898 * 899 * @og.rev 5.6.1.0 (2013/02/01) 新規追加 900 * @og.rev 5.6.4.3 (2013/05/24) 横軸ラベルを90度傾ける処理を追加 901 * @og.rev 5.9.16.2 (2017/1/28) 日付軸(dateAxis)の指定で、dateSegSize,dateSegIncluded,dateSegExcluded,dateStartTime を追加します。(6.7.3.0 (2017/01/27)) 902 * 903 * @return DateAxisオブジェクト(Time,XYTime Polt関係の時間軸表現) 904 */ 905 protected DateAxis getDateAxis() { 906 DateAxis daxis = new DateAxis( domainLabel ); 907 daxis.setDateFormatOverride( new SimpleDateFormat( dateAxisFormat ) ); 908 909 // 5.6.4.3 (2013/05/24) 時間関係の横軸は、rotationLabel ではなく、useVerticalLabels を使います。 910 if( useVerticalLabels ) { 911 daxis.setVerticalTickLabels( useVerticalLabels ); 912 } 913 914 if( timeLine != null ) { daxis.setTimeline( timeLine ); } // 6.7.3.0 (2017/01/27) 915 916 return daxis; 917 } 918 919 /** 920 * デバッグフラグを指定します。 921 * 922 * true に設定すると、チャートの状態を System.out.println します。 923 * 924 * @og.rev 4.0.2.0 (2007/12/20) 新規追加 925 * 926 * @param flag デバッグフラグ [true:デバッグ/false:通常] 927 */ 928 public void setDebug( final boolean flag ) { 929 isDebug = flag; 930 } 931}