`
lsf171028
  • 浏览: 26275 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jfreechart自定义事件

阅读更多
package com.web.warning.util;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.XYItemEntity;
import org.jfree.chart.plot.ValueMarker;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;

public class TimeSeriesTest extends ApplicationFrame implements ChartMouseListener, MouseListener, MouseMotionListener{
   private static final long serialVersionUID = 1L;
   private JFreeChart chart;
   private ChartPanel chartPanel;
   private boolean domainCrosshairState;
   private XYItemEntity xyItemEntity;
   private boolean isDraged;
  
   public TimeSeriesTest(String str){
      super(str);
      XYDataset localXYDataset = createDataset();
      chart = createChart(localXYDataset);
      chartPanel = new ChartPanel(chart);
      chartPanel.setPreferredSize(new Dimension(800, 500));
      // chartPanel.setMouseZoomable(true, false);
      chartPanel.setMouseZoomable(false);
      chartPanel.addChartMouseListener(this);
      chartPanel.addMouseListener(this);
      chartPanel.addMouseMotionListener(this);

      domainCrosshairState = false;
      isDraged = false;
      setContentPane(chartPanel);
   }

   private static XYDataset createDataset(){
      Day localDay = new Day();
      TimeSeries localTimeSeries1 = new TimeSeries("随机数据", Hour.class);
      localTimeSeries1.add(new Hour(0, localDay), 520.2D);
      localTimeSeries1.add(new Hour(2, localDay), 575.1D);
      localTimeSeries1.add(new Hour(4, localDay), 564.4D);
      localTimeSeries1.add(new Hour(6, localDay), 540.2D);
      localTimeSeries1.add(new Hour(8, localDay), 530.2D);
      localTimeSeries1.add(new Hour(10, localDay), 555.2D);
      localTimeSeries1.add(new Hour(12, localDay), 580.4D);
      localTimeSeries1.add(new Hour(14, localDay), 583.2D);
      localTimeSeries1.add(new Hour(16, localDay), 595.2D);
      localTimeSeries1.add(new Hour(18, localDay), 564.4D);
      localTimeSeries1.add(new Hour(20, localDay), 523.2D);
      localTimeSeries1.add(new Hour(22, localDay), 515.2D);
      localTimeSeries1.add(new Hour(24, localDay), 530.4D);

      TimeSeries localTimeSeries2 = new TimeSeries("随机数据", Hour.class);
      localTimeSeries2.add(new Hour(0, localDay), 620.2D);
      localTimeSeries2.add(new Hour(2, localDay), 654.1D);
      localTimeSeries2.add(new Hour(4, localDay), 664.4D);
      localTimeSeries2.add(new Hour(6, localDay), 670.2D);
      localTimeSeries2.add(new Hour(8, localDay), 690.2D);
      localTimeSeries2.add(new Hour(10, localDay), 695.2D);
      localTimeSeries2.add(new Hour(12, localDay), 680.4D);
      localTimeSeries2.add(new Hour(14, localDay), 683.2D);
      localTimeSeries2.add(new Hour(16, localDay), 695.2D);
      localTimeSeries2.add(new Hour(18, localDay), 714.4D);
      localTimeSeries2.add(new Hour(20, localDay), 723.2D);
      localTimeSeries2.add(new Hour(22, localDay), 715.2D);
      localTimeSeries2.add(new Hour(24, localDay), 680.4D);

      TimeSeriesCollection localTimeSeriesCollection = new TimeSeriesCollection();
      localTimeSeriesCollection.addSeries(localTimeSeries1);
      localTimeSeriesCollection.addSeries(localTimeSeries2);

      return localTimeSeriesCollection;

   }

   private static JFreeChart createChart(XYDataset xyDataset){
      JFreeChart localChart = ChartFactory.createTimeSeriesChart("时间序列测试", "时间", "数值", xyDataset, true, true, false);
      TextTitle title = localChart.getTitle();
      title.setFont(new Font("宋体", Font.BOLD, 24));
      LegendTitle legend = localChart.getLegend();
      legend.setItemFont(new Font("宋体", Font.ITALIC, 14));

      XYPlot plot = (XYPlot)localChart.getPlot();
      plot.setBackgroundPaint(null);

      // X 轴
      DateAxis xAxis = (DateAxis)plot.getDomainAxis();
      xAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18));
      xAxis.setLabelPaint(Color.BLUE);
      SimpleDateFormat fmt = new SimpleDateFormat("k:mm");
      xAxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, 2, fmt));

      // Y 轴
      ValueAxis yAxis = plot.getRangeAxis();
      yAxis.setLabelFont(new Font("宋体", Font.PLAIN, 18));
      yAxis.setLabelPaint(Color.BLUE);

      return localChart;
   }

   public static JPanel createDemoPanel(){
      JFreeChart chart = createChart(createDataset());
      return new ChartPanel(chart);
   }

   public void chartMouseClicked(ChartMouseEvent e){
      if(e.getTrigger().getClickCount() == 2){
         domainCrosshairState = !domainCrosshairState;
         // plot.setDomainCrosshairVisible(domainCrosshairState);
         chartPanel.setHorizontalAxisTrace(domainCrosshairState); // 双击竖线
      }
     
      xyItemEntity = (XYItemEntity)e.getEntity();
      if(xyItemEntity == null) return;
      int seriesIndex = xyItemEntity.getSeriesIndex();

      XYPlot xyPlot = (XYPlot)chart.getPlot();
      XYLineAndShapeRenderer xyLineAndShapeRenderer = (XYLineAndShapeRenderer)xyPlot.getRenderer();
      for(int index = 0; index < xyItemEntity.getDataset().getSeriesCount(); index++){
         xyLineAndShapeRenderer.setSeriesShapesVisible(index, false);
      }
      xyLineAndShapeRenderer.setSeriesShapesVisible(seriesIndex, true); // 数据点可见
      System.out.println("sdsaddfassf");
   }

   public void mousePressed(MouseEvent e){
      // System.out.println("mouse key is pressed!");
  
   }

   public void mouseReleased(MouseEvent e){
      // System.out.println("mouse key is released!");
      xyItemEntity = null;
      isDraged = false;
  
   }

   public void mouseEntered(MouseEvent mouseEvent){
      // System.out.println( "mouse key is pressed!");

   }

   public void mouseExited(MouseEvent mouseEvent){
      // System.out.println( "mouse key is pressed!");

   }

   public void mouseClicked(MouseEvent mouseEvent){
      // System.out.println( "mouse key is pressed!");

   }

   public void chartMouseMoved(ChartMouseEvent e){

   }

   public void mouseDragged(MouseEvent e){

      if(xyItemEntity==null) return;
      int seriesIndex = xyItemEntity.getSeriesIndex();
      int itemIndex = xyItemEntity.getItem();
     
      int xPos = e.getX();
      int yPos = e.getY();

      Point2D point2D = chartPanel.translateScreenToJava2D(new Point(xPos, yPos));
      XYPlot xyPlot = (XYPlot)chart.getPlot();
      ChartRenderingInfo chartRenderingInfo = chartPanel.getChartRenderingInfo();
      Rectangle2D rectangle2D = chartRenderingInfo.getPlotInfo().getDataArea();
      ValueAxis valueAxis = xyPlot.getRangeAxis();
      RectangleEdge rectangleEdge = xyPlot.getRangeAxisEdge();
     
      double value = valueAxis.java2DToValue(point2D.getY(), rectangle2D, rectangleEdge);

      TimeSeriesCollection tsc = (TimeSeriesCollection)xyItemEntity.getDataset();
      TimeSeries ts = tsc.getSeries(seriesIndex);
      ts.update(itemIndex,value);
      isDraged = true;
   }

   public void mouseMoved(MouseEvent e){

   }

   public static void main(String[] paramArrayOfString){
      TimeSeriesTest dragValueApp = new TimeSeriesTest("时间序列拖动示例");
      dragValueApp.pack();
      RefineryUtilities.centerFrameOnScreen(dragValueApp);
      dragValueApp.setVisible(true);
   }
}
分享到:
评论

相关推荐

    JFreechart自定义图例

    **JFreeChart自定义图例** 在Java编程中,JFreeChart是一个强大的库,用于创建各种图表,如折线图、柱状图、饼图等。这个库在数据可视化方面非常有用,尤其对于数据分析和报告生成。在某些情况下,我们可能需要对...

    jfree生成百分比折线图,自定义纵坐标

    jfree生成百分比折线图,自定义纵坐标,只需要把main方法下的存放地址修改到自己的地址就OK了,,

    自定义JFreeChart柱状图的详细说明

    本篇文章将详细探讨如何自定义JFreeChart的柱状图,使其适应不同的项目需求。 首先,我们需要了解JFreeChart的基本使用。在JFreeChart中,柱状图可以通过`CategoryPlot`类进行创建。创建柱状图的第一步是准备数据,...

    linux下JFreeChart生成的图片乱码,可以用这个字体

    1. **设置JFreeChart使用的字体**:在生成图表时,可以通过自定义`Font`对象,并在`TextBlock`或`LegendItem`等元素中设置该字体,确保使用的是能正确显示中文的字体。例如,可以这样设置: ```java Font font = ...

    JFreeChart 官方例子 JFReeChart Dome

    2. **自定义图表**:JFreeChart允许开发者高度自定义图表,包括颜色、字体、图例、轴标签、网格线、数据点等。这种灵活性使得我们可以根据项目需求创造出独特的视觉效果。 3. **数据模型**:JFreeChart使用Dataset...

    jfreechart,jfreechart-1.0.13,jfreechart-1.0.13,jfreechart

    JFreeChart作为一款强大的开源图表库,为开发者提供了丰富的图表类型和高度自定义的能力,使得Java应用程序能够生成专业级别的图表。这个压缩包“jfreechart-1.0.13”包含了JFreeChart的完整版本,让我们一起深入...

    jfreechart demo

    此外,JFreeChart 还支持自定义图表元素,比如轴标签、图例、背景色等,这在 `ChartCustomizationDemo.java` 文件中有所体现。 除了基本的图表类型,JFreeChart 还支持更复杂的功能,如时间序列图(`...

    jfreechart依赖jar包

    6. **响应事件**:如果需要,可以添加事件监听器来处理用户与图表的交互。 总的来说,JFreeChart 是一个强大且灵活的 Java 图表库,无论是在数据分析、报表生成还是数据可视化展示中,都能发挥重要作用。其丰富的...

    JFreeChart

    2. **自定义性**:JFreeChart 提供了高度的自定义功能,包括颜色、字体、图例、轴标签、背景等,使得开发者可以根据需求定制美观且具有业务特色的图表。 3. **数据源**:图表的数据可以通过各种数据结构提供,如 ...

    JFreeChart-1.0.9.zip jfreechart.jar

    这通常对初学者非常有帮助,因为它演示了如何创建和自定义图表,以及如何将JFreeChart集成到实际项目中。 **JFreeChart-1.0.9.zip内容** 压缩包包含的主要文件是`jfreechart.jar`,这是JFreeChart库的可执行文件,...

    jfreechart

    JFreeChart 的用户可能会从中学习到如何初始化图表、设置数据、自定义样式以及将图表嵌入到 Java 应用程序中。 标签 "源码" 暗示 JFreeChart 是一个可以查看和修改源代码的项目,这对于开发者来说是一个重要的特性...

    JFreeChart混合图表演示

    5. 配置图表:自定义图表外观,如颜色、字体、标签等,可以通过设置ChartTheme或直接修改Plot、Axis、Renderer的属性来实现。 6. 显示或保存图表:最后,你可以将图表显示在Swing组件中,或者导出为图片文件,如JPEG...

    JfreeChart-雷达图与导出

    4. **自定义图表**:JFreeChart提供了丰富的API用于定制图表,例如调整字体、颜色、背景等。你可以修改`RadarPlot`和`JFreeChart`的属性来达到预期效果。 5. **显示和导出**:最后,你可以将图表显示在Java Swing...

    jfreechart使用的3个jar包

    3. **自定义图表**:你可以通过 `JFreeChart` 对象的 API 来定制图表的各个方面,如颜色、字体、边框等。 4. **创建图像输出**:将图表转换为图像输出,例如 PNG 格式: ```java BufferedImage image = chart....

    基于jfreechart开发图

    `ActionListener`接口用于监听按钮点击事件,`JFrame`、`JPanel`和`JScrollPane`等Swing组件用于构建用户界面。 在代码示例中,`ChartToImage.java`文件展示了如何创建一个图形并将其保存为图像。`ChartUtilities....

    jfreechart的jar包

    2. **高度可定制化**:JFreeChart 允许开发者自定义图表的各个方面,包括颜色、字体、标签、图例、背景等,以符合特定的设计风格和品牌规范。 3. **支持动态和交互式图表**:可以创建可更新、可点击的图表,用户...

    jfreechart中文学习文档

    JFreeChart 提供了灵活的 API 来绘制饼图,并允许用户自定义颜色、标签等属性。 **2.3 柱状图** 柱状图用于显示数据之间的对比关系。通过 JFreeChart 可以轻松创建单个或分组的柱状图,并进行自定义。 **2.4 折线...

    jfreechart_demo.zip

    6. **其他高级特性**:JFreeChart还支持3D图表、组合图、热力图等多种图表类型,以及自定义轴标签、图例、背景色等。 在"jfreechart_demo.zip"中,你可能会找到如何设置数据源(如数组、列表或数据库查询结果)、...

Global site tag (gtag.js) - Google Analytics