Cómo implementar gráficos estadísticos dinámicos en páginas jsp
Dos métodos para incrustar gráficos dinámicos en páginas JSP: insertar subprogramas en páginas JSP; generar imágenes dinámicamente a través de JavaBeans.
JSP es una tecnología de diseño web ampliamente utilizada. Es una tecnología de programación que mezcla HTML y Java script. Combina las características estáticas de HTML y las capacidades dinámicas del lenguaje Java, por lo que se utiliza para dinámica. El diseño web es muy conveniente. Al realizar el procesamiento de imágenes, generalmente es muy fácil procesar imágenes estáticas. Sin embargo, en aplicaciones prácticas, a menudo es necesario generar dinámicamente gráficos bidimensionales en páginas web.
El dibujo de un diagrama de secuencia. sobre el desarrollo de JFreeChart. El código es el siguiente:
El método createDataset() en la instancia se utiliza para crear un objeto de recopilación de datos. La recopilación de datos de un diagrama de series de tiempo es diferente de otras colecciones de datos. Necesita agregar todos los datos dentro de un período de tiempo, generalmente usando la clase TimeSeries. En este ejemplo, la generación aleatoria se realiza mediante el método random() de la clase Math.
importar?java.awt.*;importar?java.awt.event.ActionEvent;importar?java.awt.event.ActionListener;importar java.io.BufferedInputStream;importar?java.io.DataInputStream; importar java.io.FileOutputStream;importar?java.io.IOException;importar java.net.URL;importar?java.net.URLConnection;importar java.text.DateFormat;importar?java.text.ParseException;importar java.text. SimpleDateFormat;importar?java.util.Calendar;importar java.util.Date;importar java.util.Random;
importar javax.swing.JApplet;importar javax.swing.Timer;
importar 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;
importar org.jfree.chart.axis.NumberAxis;import?org.jfree.data.category.DefaultCategoryDataset;import?org.jfree.data.gantt.Task;importar org. jfree.data.gantt.TaskSeries;import?org.jfree.data.gantt.TaskSeriesCollection;import?org.jfree.d
ata.time.Day;importar org.jfree.data.time.Second;import?org.jfree.data.time.TimeSeries;import?org.jfree.data.time.TimeSeriesCollection;import?org.jfree.data.xy .XYDataset;
la clase pública shixutu extiende JApplet {?
//PLOT_FONT es un objeto constante de fuente estática. El uso de este objeto puede evitar que se creen objetos de fuente repetidamente de forma privada. static final Font PLOT_FONT = new Font("黑体", Font.ITALIC ,?18); JFreeChart chart;
//¿Crear un detector para actualizaciones dinámicas de datos?class DataGenerator extiende Timer?implements ActionListener {?private static final long serialVersionUID =?3977867288743720504L; String?equID;?//Número de ID del dispositivoint?totalTask;//Número de tareas String[][]?strTask;//Estado de la tarea
public void?actionPerformed( ActionEvent actionevent) {?addTotalObservation(); } DataGenerator()?{super(1000,?null);?addActionListener(this);?System.out.println("super");?} }//Datos a actualizar Agregar al gráfico private void addTotalObservation()?{System.out.println("addTotalObservation");?//Establecer un nuevo conjunto de datos chart.getXYPlot().setDataset(createDataset());?//Notificar datos de Jfreechart A se ha producido un cambio, ¿volver a dibujar el histograma? ).setFont(new Font("official script", Font.BOLD,?26));//Establecer el color de fondo chart.setBackgroundPaint(new?Color(252,175,134));XYPlot plot = chart.getXYPlot();// Obtener el gráfico El atributo de dibujo plot.setDomainGridlinesVisible(false);?//Configurar la cuadrícula para que no se muestre//Obtener el objeto de línea de tiempo DateAxis dateAxis = (DateAxis)?plot.getDomainAxis();dateAxis.setLabelFont(PLOT_FONT);// Establecer la fuente de la línea de tiempo //Establecer la fuente del valor de escala de la línea de tiempo dateAxis.setTickLabelFont(new?Font("宋体",Font.PLAIN,12));dateAxis.setLowerMargin(0.0);//Establecer el valor mínimo mostrado en la línea de tiempo/ /Obtener el eje de datos Objeto ValueAxis valueAxis =?pl
ot.getRangeAxis();valueAxis.setLabelFont(PLOT_FONT);?//Establecer la fuente de datos DateFormat format = new SimpleDateFormat("mm minutos ss segundos"); //Crear objeto de formato de fecha //Crear objeto DateTickUnit DateTickUnit dtu = new? DateTickUnit (DateTickUnitType.SECOND,30,format);dateAxis.setTickUnit(dtu);?//Establecer la etiqueta de fecha del eje de fecha } //¿Salir los resultados en el archivo?
privado estático? ?void writeChartAsImage (gráfico JFreeChart)?{FileOutputStream fos_jpg =?null;intenta?{fos_jpg = new?FileOutputStream("D:\\test\\shixutu.jpg");ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,? null);} catch (Exception e)?{e.printStackTrace();} finalmente?{try?{fos_jpg.close();} catch (Exception e)?{}}}//Crear una colección de datos objeto público estático XYDataset createDataset()?{?//Instanciar TimeSeries object?TimeSeries timeseries = new?TimeSeries("Datos");?Segundo segundo = nuevo Segundo();?//Instanciar Daydouble d =?50D;?// ¿Agregar datos durante 365 días en un año?for (int i = 0; i < 500; i++)?{d = d + (Math.random() - 0.5) * 10;?//Crear datos aleatorios?series temporales. second(day, d);?//Agregar datos a la colección de datos? second = (Second)? second.next();?}TimeSeriesCollection timeSeriesCollection =?new?TimeSeriesCollection(timeseries);//Devolver el objeto de recopilación de datos return timeSeriesCollection;? }? //Inicialización del programa Applet
public void init()?{ // 1.?Obtener el conjunto de datos XYDataset =?createDataset();?// 2.?Construir chartchart = ?ChartFactory.createTimeSeriesChart(? "Demostración del diagrama de secuencia", //?Título del gráfico?"Hora", ///?Etiqueta de visualización del eje del directorio - eje horizontal?"Valor", //Etiqueta de visualización del eje numérico- -eje vertical?conjunto de datos, // ?Conjunto de datos?false,false, //¿Si se debe generar una herramienta?false //¿Si se debe generar un enlace URL?);?// 3.?Manejar el problema de visualización del gráfico en chino ?processChart(chart);?// 4.?chart Imágenes de salida?//writeChartAsImage(chart);// 5. chart? Salida en forma oscilante //6. ;panel de gráficos.
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() { }}