Java JfreeChart 问题请教

hyrongg 2008-01-18 04:10:28
我想做一个折线图,下面这个例子可以实现当鼠标放到节点上时,显示节点的值,我想实现当鼠标移动到节点中间的任意位置时,也能计算出当前
点垂直线与折线相交的值,哪位做过?共享一下或者发给我:hyrongg@gmail.com

谢谢!

package charttest;

import java.awt.Color;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

/**
* @author <a href="mailto:wanghb@sinotec.com.cn">wanghb</a>
* @version 1.0
*/
public class LineChart1{
public LineChart1() {
}

public static void main(String[] args){

// 各曲线名称
String series1 = "Type1";
String series2 = "Type2";
String series3 = "type3";


// 横轴名称(列名称)
String type1 = "Jan";
String type2 = "Feb";
String type3 = "Mar";
String type4 = "Apr";
String type5 = "May";
String type6 = "June";
String type7 = "Jul";
String type8 = "Aug";


// 建立dataset
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
// 以下可以动态添加数据
dataset.addValue(1.3, series1, type1);
dataset.addValue(4.2, series1, type2);
dataset.addValue(3.9, series1, type3);
dataset.addValue(5.5, series1, type4);
dataset.addValue(5.3, series1, type5);
dataset.addValue(7.1, series1, type6);
dataset.addValue(7.9, series1, type7);
dataset.addValue(9.0, series1, type8);

dataset.addValue(5.3, series2, type1);
dataset.addValue(7.1, series2, type2);
dataset.addValue(6.6, series2, type3);
dataset.addValue(8.0, series2, type4);
dataset.addValue(4.8, series2, type5);
dataset.addValue(4.5, series2, type6);
dataset.addValue(3.7, series2, type7);
dataset.addValue(4.2, series2, type8);

dataset.addValue(4.3, series3, type1);
dataset.addValue(6.4, series3, type2);
dataset.addValue(3.5, series3, type3);
dataset.addValue(4.0, series3, type4);
dataset.addValue(3.6, series3, type5);
dataset.addValue(3.9, series3, type6);
dataset.addValue(2.5, series3, type7);
dataset.addValue(3.1, series3, type8);
dataset.addValue(4.0, "Alert", type4);
dataset.addValue(6.4, "Alert", type2);
dataset.addValue(4.3, "Alert2", type1);

// 建立chart
JFreeChart chart = ChartFactory.createLineChart(
"2005 Data Chart", // chart title
"Date", // domain axis label
"Value(million)", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);

// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
CategoryPlot plot = chart.getCategoryPlot();
// customise the range axis...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);

LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
// renderer.setBaseShape(new Rectangle2D.Double(-1.5, -1.5, 3, 3), true); //设置点
renderer.setShape(new Rectangle2D.Double(-1.5, -1.5, 3, 3));
renderer.setShapesVisible(true);
renderer.setSeriesPaint(3,Color.red);
renderer.setSeriesLinesVisible(3,false);


renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());//显示折点数据
renderer.setItemLabelsVisible(true);

ChartFrame pieFrame = new ChartFrame("折线图预警图",chart);
pieFrame.pack();
pieFrame.setVisible(true);
}
}

...全文
146 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyrongg 2008-01-18
  • 打赏
  • 举报
回复
类似
http://finance.google.com/finance?q=.DJI%20.IXIC%20.INX

这个,不过他是用Flash做的

ls的无聊的时候帮我试试看啥
江东闲客 2008-01-18
  • 打赏
  • 举报
回复
两点
一是根据鼠标位置取坐标
二是根据坐标来计算

来这里逛就是因为工作累了,随便瞅瞅,周五的下午真难熬啊

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧