Package org.skzr.chart4me.demo.applet

Source Code of org.skzr.chart4me.demo.applet.StockJFreeChart

/**
* Copyright (c) 2010-2020 by skzr.org
* All rights reserved.
* @Author skzr.org(E-mail:skzr.org@gmail.com)
* @date 2010-11-1 下午10:55:07
*/
package org.skzr.chart4me.demo.applet;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.util.Date;

import javax.swing.JApplet;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.axis.SegmentedTimeline;
import org.jfree.chart.plot.XYPlot;
import org.skzr.framework.util.UtilDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* 一个股票的JFreeChart例子
* @jdk 1.6
* @author skzr.org(E-mail:skzr.org@gmail.com)
* @version 1.0.0
*/
public class StockJFreeChart extends JApplet {
  private static final long serialVersionUID = 1L;
  protected final transient Logger logger = LoggerFactory
      .getLogger(getClass());

  private void buildChart() {
    final DateAxis dateAxis = new DateAxis("时间");
    final Date date = new Date();
    dateAxis.setRange(UtilDate.getTimeOfDay(date, "9"), UtilDate.getTimeOfDay(date, "15:30"));
   
    //9:00->11:30,13:00->15:00
    SegmentedTimeline timeline = new SegmentedTimeline(1000, (2 * 60 + 30) * 60, (30 + 60) * 60);
    timeline.setStartTime(dateAxis.getMinimumDate().getTime());
    dateAxis.setTimeline(timeline);
    dateAxis.setDateFormatOverride(new DateFormat() {
      private static final long serialVersionUID = 1L;
      private long mid1 = UtilDate.getTimeOfDay(date, "11:30").getTime();
      private long mid2 = UtilDate.getTimeOfDay(date, "13").getTime();
      private DateFormat minFormat = UtilDate.getFormater("HH:mm:ss");
      private DateFormat format = UtilDate.getFormater("HH:mm");
     
      private boolean isMid(Date date) {
        return mid1 == date.getTime() || mid2 == date.getTime();
      }
      @Override
      public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) {
        if (isMid(date)) return toAppendTo.append("11:30/13:00");
        return (DateTickUnitType.SECOND.equals(dateAxis.getTickUnit().getUnitType()) ? minFormat : format).format(date, toAppendTo, pos);
      }
     
      @Override
      public Date parse(String source, ParsePosition pos) {
        throw new IllegalStateException("[开发者]方法未实现");
      }
    });
   
    JFreeChart chart = ChartFactory.createTimeSeriesChart("股票代码", "时间", "价位", null, true, true, true);
    XYPlot plot = chart.getXYPlot();
    plot.setDomainAxis(dateAxis);
    ChartPanel panel = new ChartPanel(chart);
    bindMouseListener(panel);
    add(panel);
  }
 
  private void bindMouseListener(ChartPanel chartPanel) {
    chartPanel.addChartMouseListener(new ChartMouseListener() {
     
      public void chartMouseMoved(ChartMouseEvent event) {
      }
     
      public void chartMouseClicked(ChartMouseEvent event) {
        logger.debug("鼠标点击事件:{}", event);
      }
    });
  }

  @Override
  public void init() {
    logger.info("JFreeChart你好!");
    buildChart();
  }
}
TOP

Related Classes of org.skzr.chart4me.demo.applet.StockJFreeChart

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.