想实现一个实时动态的曲线图展现在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);
} });
}
}
以下是动态曲线代码
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);
} });
}
}
你根据这个改吧
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);
}
}
你的意思是说用JFreeChart,通过applet放到页面上??
flash应该好看,不会弄啊。。