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;
import java.awt.Dimension;
import java.sql.*;
public class RealTimeChart extends ChartPanel implements Runnable
{
private static TimeSeries timeSeries,timeSeries2;
private long value=0;
double former;
double later=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("data1",Millisecond.class);
timeSeries2 = new TimeSeries("data2",Millisecond.class);
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeSeries);
timeseriescollection.addSeries(timeSeries2);
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"time()",yaxisName,timeseriescollection,true,true,false);
XYPlot xyplot = jfreechart.getXYPlot();
//纵坐标设定
ValueAxis valueaxis = xyplot.getDomainAxis();
//自动设置数据轴数据范围
valueaxis.setAutoRange(true);
valueaxis.setFixedAutoRange(60000D); //数据轴固定数据范围 30s
valueaxis = xyplot.getRangeAxis();
valueaxis.setRange(0.0D,10000D);//设置Y轴的取值范围double
return jfreechart;
}
public void run()
{
while(true)
{
try
{
timeSeries.add(new Millisecond(),sqlrun());
timeSeries2.add(new Millisecond(),1000.0);
//System.out.println("this ="+sqlrun());
Thread.sleep(300);
}
catch (InterruptedException e) { }
}
}
private long randomNum()
{
System.out.println((Math.random()*20+80));
return (long)((Math.random()*20+80)*100);
}
public double sqlrun() {
double zhi=0.0;
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url="jdbc:mysql://localhost:3306/information_schema";
String user="root";
String password="123";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement();
String sql="select * from GLOBAL_STATUS where VARIABLE_NAME='BYTES_RECEIVED'";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {
former=Double.valueOf(rs.getString(2)).doubleValue();
zhi=former-later;
System.out.println("差值为:"+zhi);
later=former;
if(zhi>50000){//设计这个的目的就是当第一次读取时数据过大而导致的图标取值域过大
zhi=2000;
}
}
}catch(Exception e){
e.printStackTrace();
}
return zhi;
}
}
//Test.java
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Test
{
public static void main(String[] args)
{
JFrame frame=new JFrame("Test Chart");
// RealTimeChart rtcp=new RealTimeChart("Random Data","Random","Value"); //测试流量
//TableLockChart tlc=new TableLockChart("Data","Table_Lock","Value");//测试表锁
frame.getContentPane().add(tlc,new BorderLayout().CENTER);
frame.pack();
frame.setVisible(true);
(new Thread(tlc)).start();
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
});
}
}