如何在PHP上显示JFreechart?

如何在PHP上显示JFreechart?可能大部分都遇到这种情况,在JSP上的servlet能完全的显示出JFreechart画的统计图,但是和其他语言混合运用就不能显示了

我现在也遇到这个问题,想了半个小时终于弄明白了,实现的过程还是很简单的。(个人经验总结而已)

解决的思路:

1.先将JFreechart生成的图片保存在web 服务器上。

2.然后在JSP上用<img>标签显示

3.通过JS将JSP导入PHP页面

这样就实现了。

部分getColumnChart.jsp源码:

<%
String startTime = request.getParameter("startTime");
String endTime = request.getParameter("endTime");
String filter = request.getParameter("filter");
Charts charts = new Charts();
String start = startTime == null ? "2013-05-12" : startTime;
String end = endTime == null ? "2013-11-01" : endTime;
String filters = filter == null ? "eventtype" : filter;
JFreeChart chart = charts
.getPieChart(startTime, endTime, filter);//开始时间、结束时间、filter
String filename = ServletUtilities.saveChartAsJPEG(chart, 800, 400,
null, session);
FileOutputStream fos_jpg = null;
File file = new File(application.getRealPath("")+"/charts");
String path =request.getContextPath()+"/charts/NoData.jpg";
try {
file.mkdirs();
fos_jpg = new FileOutputStream(file.getPath()+"/"+filename);
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 800, 400,
null);
} catch (Exception e) {
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
}
}
path = request.getContextPath()+"/charts/"+filename;
%>
<div align="center">
<img src="<%=path %>" name="图片" width=800 height=400 border=0>
</div>
实现导入JSP的JS源码

extjs.chart.chart3D = function(nodeid,id){
var panel = new Ext.Panel({
border:false,
fitToFrame: true,//很简单的就一个Html标签
html: '<iframe id="frameHelp" src="/getColumnChart.jsp" frameborder="0" width="100%" height="520" ></iframe>'
});
return panel;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JFreeChart是一个开源的Java图表库,可以用于创建各种类型的图表,包括折线图、柱状图、饼图等。要在JFreeChart显示tooltip,可以按照以下步骤进行操作: 1. 创建一个ChartPanel对象,该对象将用于显示图表。 2. 为ChartPanel对象添加一个MouseListener,以便捕获鼠标事件。 3. 在MouseListener的mouseMoved方法中,获取鼠标的坐标,并使用ChartPanel的getChartRenderingInfo方法获取图表的渲染信息。 4. 使用ChartRenderingInfo对象的getEntityCollection方法获取图表中的实体集合。 5. 遍历实体集合,判断鼠标坐标是否在实体的区域内。 6. 如果鼠标在实体的区域内,则可以通过实体对象的getToolTipText方法获取tooltip的内容。 7. 将tooltip内容显示在合适的位置,例如使用JOptionPane.showMessageDialog方法显示一个弹出窗口。 下面是一个示例代码,演示了如何在JFreeChart显示tooltip: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.entity.ChartEntity; import org.jfree.chart.entity.XYItemEntity; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.XYDataset; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; public class JFreeChartTooltipExample { public static void main(String[] args) { // 创建一个示例的XYDataset XYDataset dataset = createDataset(); // 创建一个折线图 JFreeChart chart = ChartFactory.createXYLineChart( "示例图表", // 图表标题 "X", // X轴标签 "Y", // Y轴标签 dataset // 数据集 ); // 创建一个ChartPanel对象,并设置大小 ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(500, 300)); // 添加鼠标移动事件监听器 chartPanel.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { // 获取鼠标坐标 int mouseX = e.getX(); int mouseY = e.getY(); // 获取图表的渲染信息 ChartRenderingInfo info = chartPanel.getChartRenderingInfo(); // 获取图表中的实体集合 EntityCollection entities = info.getEntityCollection(); // 遍历实体集合,判断鼠标坐标是否在实体的区域内 for (Object entityObj : entities.getEntities()) { ChartEntity entity = (ChartEntity) entityObj; if (entity instanceof XYItemEntity) { Shape shape = entity.getArea(); if (shape.contains(mouseX, mouseY)) { // 如果鼠标在实体的区域内,获取tooltip内容并显示 String tooltip = entity.getToolTipText(); JOptionPane.showMessageDialog(null, tooltip); break; } } } } }); // 创建一个窗口,并将ChartPanel添加到窗口中 JFrame frame = new JFrame("JFreeChart Tooltip Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(chartPanel); frame.pack(); frame.setVisible(true); } private static XYDataset createDataset() { // 创建一个示例的XYDataset // 这里使用了一个简单的随机数据 XYSeries series = new XYSeries("数据系列"); for (int i = 0; i < 10; i++) { series.add(i, Math.random() * 100); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); return dataset; } } ``` 这个示例代码创建了一个简单的折线图,并在鼠标移动时显示tooltip。你可以根据自己的需求修改代码,以适应不同类型的图表和tooltip内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值