怎么从数据库中调出数据并生成动态图表?

 我来答
ive748
2018-02-03 · TA获得超过124个赞
知道小有建树答主
回答量:388
采纳率:0%
帮助的人:207万
展开全部
JSP页面中嵌入动态图表的两种方法 :在JSP页面中插入Applet小程序 ;通过JavaBean动态生成图像。
JSP是一种广泛应用的网页设计技术 ,它是一种HTML和Java脚本混合的编程技术 ,它结合了HTML的静态特性和Java语言的动态能力 ,因此用它进行动态网页设计非常方便。在进行图像处理时 ,一般处理静态图片非常容易 ,但是 ,在实际应用中常常需要动态地盯乎在网页中生成二维的图形.
基于JFreeChart开发的一个时序图的绘制。代码如下:
实例中createDataset()方法用于创御郑建数据集合对象。时序图的数据集合与其他数据集合不同,它需要添加一个时间段内的镇则颂所有数据,通常采用TimeSeries类进行添加。该实例中通过Math类的random()方法进行随机生成。
import java.awt.*;
import java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import
java.io.DataInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.net.URL;
import
java.net.URLConnection;
import java.text.DateFormat;
import
java.text.ParseException;
import java.text.SimpleDateFormat;
import
java.util.Calendar;
import java.util.Date;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.Timer;
import org.jfree.chart.*;
import
org.jfree.chart.annotations.CategoryTextAnnotation;
import
org.jfree.chart.axis.CategoryAnchor;
import
org.jfree.chart.axis.CategoryAxis;
import
org.jfree.chart.axis.CategoryLabelPositions;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.DateTickUnitType;
import
org.jfree.chart.axis.ValueAxis;
import
org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import
org.jfree.chart.plot.CategoryPlot;
import
org.jfree.chart.plot.PlotOrientation;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.category.BarRenderer;
import
org.jfree.chart.title.TextTitle;
import
org.jfree.data.category.CategoryDataset;
import
org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.chart.axis.NumberAxis;
import
org.jfree.data.category.DefaultCategoryDataset;
import
org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import
org.jfree.data.gantt.TaskSeriesCollection;
import
org.jfree.data.time.Day;
import org.jfree.data.time.Second;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.XYDataset;
public class shixutu extends JApplet {

//PLOT_FONT是一静态的字体常量对象,使用此对象可以避免反复用到的字体对象被多次创建

private static final Font PLOT_FONT = new Font("黑体", Font.ITALIC ,
18);
JFreeChart chart;
//创建数据动态更新的监听
class DataGenerator extends Timer
implements ActionListener {

private static final long serialVersionUID =
3977867288743720504L;
String
equID;
//设备ID号
int
totalTask;
//任务数
String[][]
strTask;
//任务情况
public void
actionPerformed(ActionEvent actionevent) {
addTotalObservation();
} DataGenerator()
{

super(1000,
null);

addActionListener(this);

System.out.println("super");

}
}

//将更新的数据添加到chart中
private void addTotalObservation()
{

System.out.println("addTotalObservation");

//设置新的数据集

chart.getXYPlot().setDataset(createDataset());

//通知Jfreechart
数据发生了改变,重新绘制柱状图
if
(chart != null)
{

chart.fireChartChanged();

}
}
private static void
processChart(JFreeChart chart)
{

//设置标题字体

chart.getTitle().setFont(new Font("隶书", Font.BOLD,
26));

//设置背景色

chart.setBackgroundPaint(new
Color(252,175,134));

XYPlot plot = chart.getXYPlot();
//获取图表的绘制属性

plot.setDomainGridlinesVisible(false);
//设置网格不显示

//获取时间轴对象

DateAxis dateAxis = (DateAxis)
plot.getDomainAxis();

dateAxis.setLabelFont(PLOT_FONT);
//设置时间轴字体

//设置时间轴标尺值字体

dateAxis.setTickLabelFont(new
Font("宋体",Font.PLAIN,12));

dateAxis.setLowerMargin(0.0);
//设置时间轴上显示的最小值

//获取数据轴对象

ValueAxis valueAxis =
plot.getRangeAxis();

valueAxis.setLabelFont(PLOT_FONT);
//设置数据字体

DateFormat format = new SimpleDateFormat("mm分ss秒");
//创建日期格式对象

//创建DateTickUnit对象

DateTickUnit dtu = new
DateTickUnit(DateTickUnitType.SECOND,30,format);

dateAxis.setTickUnit(dtu);
//设置日期轴的日期标签 } //将结果输出在文件中
private static
void writeChartAsImage(JFreeChart chart)
{

FileOutputStream fos_jpg =
null;

try
{

fos_jpg = new
FileOutputStream("D:\\test\\shixutu.jpg");

ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,
null);

} catch (Exception e)
{

e.printStackTrace();

} finally
{

try
{

fos_jpg.close();

} catch (Exception e)
{

}

}

}

//创建数据集合对象

public static XYDataset createDataset()
{

//实例化TimeSeries对象

TimeSeries timeseries = new
TimeSeries("Data");

Second second = new Second();
//实例化Day

double d =
50D;

//添加一年365天的数据

for (int i = 0; i < 500; i++)
{

d = d + (Math.random() - 0.5) * 10;
//创建随机数据

timeseries.second(day, d);
//向数据集合中添加数据

second = (Second)
second.next();

}
TimeSeriesCollection timeSeriesCollection =
new
TimeSeriesCollection(timeseries);

//返回数据集合对象

return timeSeriesCollection; } //Applet程序初始化
public void init()
{
// 1.
得到数据
XYDataset dataset =
createDataset();

// 2.
构造chart

chart =
ChartFactory.createTimeSeriesChart(

"时序图示范", //
图表标题

"时间", //
目录轴的显示标签--横轴

"数值", //
数值轴的显示标签--纵轴

dataset, //
数据集

false,

false, //
是否生成工具

false //
是否生成URL链接

);

// 3.
处理chart中文显示问题

processChart(chart);

// 4.
chart输出图片

//writeChartAsImage(chart);

// 5. chart
以swing形式输出

//6.使用applet输出

ChartPanel chartPanel = new
ChartPanel(chart);

chartPanel.setPreferredSize(new
java.awt.Dimension(800,500));

getContentPane().add(chartPanel); (new
DataGenerator()).start();

}

public void
paint(Graphics g)
{
if
(chart != null)
{

chart.draw((Graphics2D) g,
getBounds());

}
}

public void destroy() {
}
}
ZESTRON
2024-09-04 广告
表界面分析在材料科学及化学领域占据核心地位,它深入探索物质表面与界面的微观结构、化学组成及相互作用。通过电商平台射线光电子能谱(电商平台PS)、扫描电子显微镜(SEM)及原子力显微镜(AFM)等先进技术手段,我们Dr. O.K. Wack ... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式