/** * *

Titulo: Servidor de respuestas a preguntas

*

Descripcion: Este programa permite crear un grafico de barras *

* @author Diego Gonzalez Barrientos * @version 1.0 */ //Paquete en el que se encapsula todo el codigo del servidor package servidorpreguntas; //Paquetes usados por el programa import java.awt.Color; import java.awt.Paint; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.DatasetUtilities; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.ui.TextAnchor; import java.util.Vector; import java.lang.Comparable; /**Clase que genera grafico de barras * */ public class BarChart extends ApplicationFrame { /** * Retorna un color diferente por cada item en una serie. */ class CustomRenderer extends BarRenderer { /** Los colores. */ private Paint[] colors; /** * Crea un nuevo arreglo de colores. * * @param colors los colores. */ public CustomRenderer(final Paint[] colors) { this.colors = colors; } /** * Returns the paint for an item. Overrides the default behaviour inherited from * AbstractSeriesRenderer. * * @param row the series. * @param column the category. * * @return The item color. */ public Paint getItemPaint(final int row, final int column) { return this.colors[column % this.colors.length]; } } /** * Crea un nuevo grafico de barra. * * @param title El titulo del grafico. *@param contador mantiene contador de respuestas de la alternativas *@param alternativa_correcta *@param numero_alternativas */ public BarChart(final String title, int[] contador, int alternativa_correcta, int numero_alternativas) { super(title); final CategoryDataset dataset = createDataset(contador,alternativa_correcta,numero_alternativas); final JFreeChart chart = createChart(dataset,title,alternativa_correcta); final ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(800, 600)); setContentPane(chartPanel); } /** * Crea un conjunto de datos. * @param contador *@param alternativa_correcta *@param numero_alternativas * @return un conjunto de datos. */ private CategoryDataset createDataset(int[] contador, int alternativa_correcta, int numero_alternativas) { final double[][] data = new double[1][contador.length]; String[] nombre_columna = new String[contador.length]; for (int i = 0; i< contador.length; i++){ data[0][i] = (double)contador[i]; if (SPP_Server.arregloAlternativas == null) { nombre_columna[i] = SPP_Server.alt_arreglo[i]; } else { nombre_columna[i] = SPP_Server.arregloAlternativas[i]; } } //System.out.println(nombre_columna.length + " " + data.length); return DatasetUtilities.createCategoryDataset(new String[]{"a"},nombre_columna,data); } /** * Creates a sample chart. * * @param dataset the dataset. * * @return a sample chart. */ private JFreeChart createChart(final CategoryDataset dataset, String title, int alternativa_correcta) { String alternativa; if(SPP_Server.arregloAlternativas == null) alternativa = new String("Alternativa (correcta: " + SPP_Server.alt_arreglo[(alternativa_correcta-1)] + ")"); else alternativa = new String("Alternativa (correcta: " + SPP_Server.arregloAlternativas[(alternativa_correcta-1)] + ")"); final JFreeChart chart = ChartFactory.createBarChart( title, // chart title alternativa, // domain axis label "Veces Contestada", // range axis label dataset, // data PlotOrientation.VERTICAL, // the plot orientation false, // include legend true, false ); chart.setBackgroundPaint(Color.lightGray); // get a reference to the plot for further customisation... final CategoryPlot plot = chart.getCategoryPlot(); plot.setNoDataMessage("NO DATA!"); final CategoryItemRenderer renderer = new CustomRenderer( new Paint[] {Color.red, Color.blue, Color.green, Color.yellow, Color.orange, Color.cyan, Color.magenta, Color.blue} ); renderer.setItemLabelsVisible(true); final ItemLabelPosition p = new ItemLabelPosition( ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER, 45.0 ); renderer.setPositiveItemLabelPosition(p); plot.setRenderer(renderer); // change the margin at the top of the range axis... final ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setAutoRange(true); return chart; } }