我在JSP页面上想用jfreechart画图显示CPU及内存的利用率图片如下所示,里面的数据是从MySQL数据库里得到的,但是我只找到了一条线的画法,我想把内存的情况同时显示在这张图上应该怎么做?
JSP代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.awt.Font,java.awt.Rectangle,java.io.File,java.io.IOException,java.sql.DriverManager,java.sql.ResultSet,
org.jfree.chart.ChartFactory,org.jfree.chart.ChartFrame,org.jfree.chart.ChartUtilities,org.jfree.chart.JFreeChart,org.jfree.chart.axis.CategoryAxis,
org.jfree.chart.axis.NumberAxis,org.jfree.chart.axis.NumberTickUnit,org.jfree.chart.labels.StandardCategoryItemLabelGenerator,
org.jfree.chart.plot.CategoryPlot,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.renderer.category.LineAndShapeRenderer,
org.jfree.data.category.DefaultCategoryDataset,java.sql.Connection,java.sql.SQLException,java.sql.Statement,org.jfree.chart.servlet.ServletUtilities
" %>
<%@ page import="com.time.Time" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>昨天主机CPU利用情况</title>
<link type="text/css" href="style.css" rel="stylesheet">
</head>
<body>
<%
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
String driverName = "com.mysql.jdbc.Driver";
String username = "root";
String password = "19931101";
String dbName = "cpu";
String tableName = "tb3";
String url = "jdbc:mysql://localhost/"+dbName+"?user="+username+"&password="+password;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
Time time = new Time();
String t1 = time.getYesterdaymorning();
String t2 = time.getYesterdaynight();
String sql="SELECT * FROM tb3 WHERE time>='"+t1+"'AND time<='"+t2+"'";
ResultSet rs=stmt.executeQuery(sql);
while (rs.next()) {
dataset.addValue(rs.getInt(1), "", rs.getString(3).substring(11,16));
}
rs.close();
JFreeChart chart = ChartFactory.createLineChart("用户CPU利用率", // 主标题的名称
"时间",// X轴的标签
"利用率(%)",// Y轴的标签
dataset, // 图标显示的数据集合
PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)
true,// 是否显示子标题
true,// 是否生成提示的标签
true); // 是否生成URL链接
// 处理图形上的乱码
// 处理主标题的乱码
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
// 处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
// 获取图表区域对象
CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
// 获取X轴的对象
CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
categoryAxis.setMaximumCategoryLabelLines(2);
// 获取Y轴的对象
NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
// 处理X轴上的乱码
categoryAxis.setTickLabelFont(new Font("Times New Roman", Font.BOLD, 10));
// 处理X轴外的乱码
categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上的乱码
numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴外的乱码
numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
// 处理Y轴上显示的刻度,以10作为1格
numberAxis.setAutoTickUnitSelection(false);
NumberTickUnit unit = new NumberTickUnit(10);
numberAxis.setTickUnit(unit);
// 获取绘图区域对象
LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot
.getRenderer();
// 在图形上显示数字
lineAndShapeRenderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
lineAndShapeRenderer.setBaseItemLabelsVisible(true);
lineAndShapeRenderer
.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
// 在图形上添加转折点(使用小矩形显示)
Rectangle shape = new Rectangle(10, 10);
lineAndShapeRenderer.setSeriesShape(0, shape);
lineAndShapeRenderer.setSeriesShapesVisible(0, true);
String fileName = "";
try {
fileName = ServletUtilities.saveChartAsPNG(chart, 600, 500, null, session);
} catch (IOException e) {
e.printStackTrace();
}
String URL = request.getContextPath() + "/DisplayChart?filename=" + fileName;
%>
<img src="<%= URL %>" width="1000px" height="600px" style="margin-top:2em;display:block;margin-left:auto;margin-right:auto">
<br>
<p style="margin-left:auto;margin-right:auto;width:7em"><a href="login_success.jsp">返回主页面</a></p>
</body>
</html>
MySQL里数据表如下:
请大家帮帮我,谢谢了。
认证0级讲师