Red de conocimientos turísticos - Conocimientos sobre calendario chino - Utilice Java para dibujar la biblioteca en la base de datos de SQL SERVER en un gráfico, similar a un stock con ejes XY y visualización de curvas. ¿Qué debo hacer?

Utilice Java para dibujar la biblioteca en la base de datos de SQL SERVER en un gráfico, similar a un stock con ejes XY y visualización de curvas. ¿Qué debo hacer?

Hay dos formas de lograr esto, una es la instancia oficial de JFreeChart MemoryUsageDemo.java. Agregue datos en tiempo real a TimeSeries en su oyente a través de una clase interna que implemente java.Swing.Timer Dado que Timer implementará el tiempo real, este enfoque no es un problema. No hay nada de malo en este método, puede consultar el código.

Otro método es implementar la interfaz Runnable para la clase en tiempo real y agregar datos en tiempo real a TimeSeries a través de un bucle infinito en su método run(). El siguiente es un código de implementación más simple:

p>

Código Java

//RealTimeChart .NET Framework 3.5.0.

XYPlot;

importar org.jfree.data.time.TimeSeries;

importar org.jfree.data.time.TimeSeriesCollection

la clase pública RealTimeChart extiende ChartPanel; implementa Runnable

{

TimeSeries privado estático timeSeries

valor largo privado=0

public RealTimeChart( String chartContent,String title; ,String yaxisName)

{

super(createChart(chartContent,title,yaxisName));

}

JFreeChart estático privado createChart (String chartContent,String title,String yaxisName){

//Creando un objeto de gráfico de serie temporal

timeSeries = new TimeSeries (chartContent,Millisegundo.class); p>TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);

JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(título, "tiempo (segundos)",yaxisName,timeseriescollection,true,true,false

<); p> XYPlot xyplot = jfreechart.getXYPlot();

XYPlot xyplot = jfreechart.getXYPlot();

>

// El rango de datos fijo del eje de datos es 30s

valueaxis.setFixedAutoRange(30000D);

valueaxis = xyplot.getRangeAxis(

// valueaxis.setRange(0.0D,200D); p>

return jfreechart;

}

public void run()

{

mientras (verdadero)

{ <

prueba

{

timeSeries.add(new Millisegundo( ), randomNum()

); Thread.sleep(300);

}

catch (InterruptedException e) { }

}

}

private long randomNum()

{

System.out.

println((Math.random()*280));

return (long)(Math.random()*280)

}

;

}

}

}

//Test.java

importar java.awt.

* @param args

*/

public static void main(String[] args)

{

JFrame frame=new JFrame("Gráfico de prueba");

RealTimeChart rtcp=new RealTimeChart("Datos aleatorios", "Número aleatorio", "Numérico"); ", "Número aleatorio", "Numérico")getContentPane().add(rtcp,new BorderLayout().CENTER);

frame.pack();

frame.setVisible(true);

(new Thread(rtcp)).start();

frame.addWindowListener(new WindowAdapter()

{

público void windowClosing(WindowEvent windowevent)

{

System.exit(0);

})

}); >

}

}

}

. Un problema con estos dos métodos es que deben reescribirse cada vez que se implementa un gráfico, porque los datos en tiempo real no se pueden pasar a través de parámetros. Me pregunto si los datos en tiempo real se pueden pasar a través del método setXXX (). que la clase de dibujo de curvas en tiempo real se puede encapsular. Solo es necesario pasar algunos parámetros.

tml>