想实现一个实时动态的曲线图展现在web页面上,不知道该如何展现了,望高手指教,最好有代码~,谢谢~!
以下是动态曲线代码
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;public class RealTimeChart extends ChartPanel implements Runnable {
private static TimeSeries timeSeries;
private long value = 0; public RealTimeChart(String chartContent, String title, String yaxisName) {
super(createChart(chartContent, title, yaxisName));
} private static JFreeChart createChart(String chartContent, String title,
String yaxisName) {
// 创建时序图对象
timeSeries = new TimeSeries(chartContent, Millisecond.class);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(
timeSeries);
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,
"time(minutes)", yaxisName, timeseriescollection, true, true,
false);
XYPlot xyplot = jfreechart.getXYPlot();
// 纵坐标设定
ValueAxis valueaxis = xyplot.getDomainAxis();
// 自动设置数据轴数据范围
valueaxis.setAutoRange(true);
// 数据轴固定数据范围 30s
valueaxis.setFixedAutoRange(30000D); valueaxis = xyplot.getRangeAxis();
// 数轴纵坐标范围
// valueaxis.setRange(90.0D,100D); return jfreechart;
} public void run() {
while (true) {
try {
timeSeries.add(new Millisecond(), randomNum());
Thread.sleep(300);
} catch (InterruptedException e) {
}
}
} private long randomNum() {
// System.out.println((Math.random()*20+80));
return (long) (Math.random() * 20 + 80);
} public static void main(String[] args) { JFrame frame = new JFrame("Test Chart");
RealTimeChart rtcp = new RealTimeChart("Random Data", "Random", "value");
frame.getContentPane().add(rtcp, new BorderLayout().CENTER);
frame.pack();
frame.setVisible(true);
(new Thread(rtcp)).start();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowevent) {
System.exit(0);
} });
}
}

解决方案 »

  1.   

    下面的是一个Pie图。。
    你根据这个改吧
    package com.test;
    import java.awt.image.BufferedImage;
    import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartRenderingInfo;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.entity.StandardEntityCollection;
    import org.jfree.chart.plot.PiePlot;
    import org.jfree.chart.urls.StandardPieURLGenerator;
    import org.jfree.data.general.DefaultPieDataset;public class Pie3DDemo {   
    private DefaultPieDataset getDataset() {   
    // categories...   
    String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };   
    // data...   
    double[] data = new double[section.length];   
     for (int i = 0; i < data.length; i++) {   
         data[i] = 10 + (Math.random() * 10);   
    }   
    // create the dataset...   
    DefaultPieDataset dataset = new DefaultPieDataset();   
    for (int i = 0; i < data.length; i++) {   
           dataset.setValue(section[i], data[i]);   
    }   
    return dataset;   
    }   
    public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {   
     DefaultPieDataset dataset = getDataset();   
    // create the chart...   
     JFreeChart chart = ChartFactory.createPieChart3D(  
      "Pie3D Chart Demo",  // chart title   
      dataset,             // data   
      true,                // include legend   
      true,   
      false   
     );   
    // set the background color for the chart...   
    //chart.setBackgroundPaint(Color.cyan);   
    PiePlot plot = (PiePlot) chart.getPlot();   
    plot.setNoDataMessage("No data available");   
    // set drilldown capability...   
     plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));   
    plot.setLabelGenerator(null);   
    // OPTIONAL CUSTOMISATION COMPLETED.   
    ChartRenderingInfo info = null;   
    HttpSession session = request.getSession();   
    try {   
    //Create RenderingInfo object   
     response.setContentType("text/html");   
     info = new ChartRenderingInfo(new StandardEntityCollection());   
     BufferedImage chartImage = chart.createBufferedImage(640, 400, info);   
    // putting chart as BufferedImage in session,   
    // thus making it available for the image reading action Action.   
    session.setAttribute("chartImage", chartImage);   
    PrintWriter writer = new PrintWriter(response.getWriter());   
    ChartUtilities.writeImageMap(writer, "imageMap", info,true);   
    writer.flush();   
    } catch (Exception e) { }   
      
    String pathInfo = "http://";   
    pathInfo += request.getServerName();   
    int port = request.getServerPort();   
    pathInfo += ":"+String.valueOf(port);   
    pathInfo += request.getContextPath();   
    String chartViewer = pathInfo + "/servlet/ChartViewer";   
    return chartViewer; 

    }}JSP页面<jsp:useBean id="myChart" scope="session" class="com.test.LineDemo" />   
     <body>   
     <h2>Pie Chart Demo</h2>   
     <%String chartViewer = myChart.getChartViewer(request, response);%>   
     <img src="<%=chartViewer%>" border=0 usemap="#imageMap">   
     servletpackage com.test;import java.awt.image.BufferedImage;
    import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import com.keypoint.PngEncoder;public class ChartViewer extends HttpServlet {    public void init() throws ServletException {  
        }   
        //Process the HTTP Get request  
        public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {   
            // get the chart from session  
            HttpSession session = request.getSession();   
            BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");   
            // set the content type so the browser can see this as a picture   
            response.setContentType("image/png");   
            // send the picture   
            PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9);   
            response.getOutputStream().write(encoder.pngEncode());  
        }   
        //Process the HTTP Post request   
        public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {   
            doGet(request, response);   
        }   
    }
      

  2.   

    JFreeChart,实时的,他是静态图片,即使你定时刷新也不可能达到啊,定时刷新,体验也不好,applet可以通讯后台数据,flash好看又能与后台通讯,可以尝试
      

  3.   


    你的意思是说用JFreeChart,通过applet放到页面上??
    flash应该好看,不会弄啊。。
      

  4.   

    使用open-flex-chart吧,无须applet,直接将数据展现成曲线,实时性很好