gt:         this.chartPanel = new ChartPanel(chart);
context: /*
   * To change this license header, choose License Headers in Project Properties.
   * To change this template file, choose Tools | Templates
   * and open the template in the editor.
   */
  package no.uio.medicine.virsurveillance.charts;
  
  /**
   *
   * @author apla
   */
  import java.awt.Color;
  import java.awt.Font;
  import java.awt.event.WindowEvent;
  import java.io.File;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  import org.jfree.chart.ChartFactory;
  
  import org.jfree.chart.ChartPanel;
  import org.jfree.chart.ChartUtilities;
  import org.jfree.chart.JFreeChart;
  import org.jfree.chart.axis.CategoryAxis;
  import org.jfree.chart.axis.CategoryLabelPositions;
  import org.jfree.chart.axis.NumberAxis;
  import org.jfree.chart.labels.BoxAndWhiskerToolTipGenerator;
  import org.jfree.chart.plot.CategoryPlot;
  import org.jfree.chart.plot.PlotOrientation;
  import org.jfree.chart.renderer.category.BoxAndWhiskerRenderer;
  import org.jfree.chart.renderer.category.CategoryItemRenderer;
  import org.jfree.data.category.CategoryDataset;
  import org.jfree.data.statistics.BoxAndWhiskerCategoryDataset;
  import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
  import org.jfree.ui.ApplicationFrame;
  import org.jfree.ui.RefineryUtilities;
  import org.jfree.util.Log;
  import org.jfree.util.LogContext;
  
  /**
   * Demonstration of a box-and-whisker chart using a {@link CategoryPlot}.
   *
   * @author David Browning
   */
  public class BoxAndWhiskerChart_AWT extends ApplicationFrame {
  
      private ChartPanel chartPanel;
  
      private String Title;
      private String xAxisTitle;
      private String chartTitle;
      private String yAxisTitle;
  
      private BoxAndWhiskerRenderer renderer;
  
      private CategoryPlot plot;
      private int colorOffset = 0;
  
      ArrayList<ArrayList<ArrayList<Float>>> dataPoints;
      ArrayList<ArrayList<String>> categories;
      ArrayList<String> seriesTitles;
  
      boolean printable = false;
  
      /**
       * Creates a new demo.
       *
       * @param applicationTitle
       * @param chartTitle
       * @param xTitle
       * @param yTitle
       * @param dataPoints
       * @param categories
       * @param seriesTitles
       */
      public BoxAndWhiskerChart_AWT(String applicationTitle, String chartTitle,
              String xTitle, String yTitle,
              ArrayList<ArrayList<ArrayList<Float>>> dataPoints,
              ArrayList<ArrayList<String>> categories,
              ArrayList<String> seriesTitles) {
  
          super(applicationTitle);
  
          this.dataPoints = dataPoints;
          this.categories = categories;
          this.seriesTitles = seriesTitles;
  
          this.chartTitle = chartTitle;
          this.xAxisTitle = xTitle;
          this.yAxisTitle = yTitle;
          this.Title = applicationTitle;
  
          BoxAndWhiskerCategoryDataset dataset = (BoxAndWhiskerCategoryDataset) createDataset(this.dataPoints, this.categories, this.seriesTitles);
  
          final CategoryAxis xAxis = new CategoryAxis(this.xAxisTitle);
          final NumberAxis yAxis = new NumberAxis(this.yAxisTitle);
          yAxis.setAutoRangeIncludesZero(false);
          this.renderer = new BoxAndWhiskerRenderer();
          this.renderer.setFillBox(false);
          renderer.setToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
          this.plot = new CategoryPlot(dataset, xAxis, yAxis, this.renderer);
  
          final JFreeChart chart = new JFreeChart(
                  this.chartTitle,
                  new Font("SansSerif", Font.BOLD, 14),
                  this.plot,
                  true
          );
          chart.setBackgroundPaint(Color.white);
          this.chartPanel = new ChartPanel(chart);
          this.chartPanel.setBackground(Color.white);
          this.chartPanel.setPreferredSize(new java.awt.Dimension(800, 500));
          setContentPane(this.chartPanel);
  
          this.setDefaultCloseOperation(HIDE_ON_CLOSE);
      }
  
      public BoxAndWhiskerChart_AWT(String applicationTitle, String chartTitle,
              String xTitle, String yTitle,
              ArrayList<ArrayList<Float>> singleSerieDataPoints,
              ArrayList<String> singleSerieCategories,
              String singleSerieTitle) {
  
          super(applicationTitle);
  
          this.chartTitle = chartTitle;
          this.xAxisTitle = xTitle;
          this.yAxisTitle = yTitle;
          this.Title = applicationTitle;
  
          this.dataPoints = new ArrayList<>();
          this.dataPoints.add(singleSerieDataPoints);
          this.categories = new ArrayList<>();
          this.categories.add(singleSerieCategories);
          this.seriesTitles = new ArrayList<>();
          this.seriesTitles.add(singleSerieTitle);
  
          BoxAndWhiskerCategoryDataset dataset = (BoxAndWhiskerCategoryDataset) createDataset(this.dataPoints, this.categories, this.seriesTitles);
  
          final CategoryAxis xAxis = new CategoryAxis(xTitle);
          final NumberAxis yAxis = new NumberAxis(yTitle);
          yAxis.setAutoRangeIncludesZero(false);
          this.renderer = new BoxAndWhiskerRenderer();
          this.renderer.setFillBox(false);
  
          this.renderer.setToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
          this.plot = new CategoryPlot(dataset, xAxis, yAxis, this.renderer);
  
          final JFreeChart chart = new JFreeChart(
                  chartTitle,
                  new Font("SansSerif", Font.BOLD, 14),
                  this.plot,
                  true
          );
          chart.setBackgroundPaint(Color.white);
          this.chartPanel = new ChartPanel(chart);
          this.chartPanel.setBackground(Color.white);
          this.chartPanel.setPreferredSize(new java.awt.Dimension(1200, 500));
          setContentPane(chartPanel);
          this.setDefaultCloseOperation(HIDE_ON_CLOSE);
  
      }
  
      private CategoryDataset createDataset(ArrayList<ArrayList<ArrayList<Float>>> dataPoints, ArrayList<ArrayList<String>> categories, ArrayList<String> titles) {
          final int nSeries = 3; //<--n caixes a cada titol equivalent a size de datapoints
          final int nCaixes = 4; //<--titols per caixa. titles. en principi ha de ser igual a dataPoints(x).size
          final int puntsPerCaixa = 22; //<-- dataPoints(i)(j).size()
  
          final DefaultBoxAndWhiskerCategoryDataset dataset
                  = new DefaultBoxAndWhiskerCategoryDataset();
  
          int i = 0;
          for (ArrayList<ArrayList<Float>> boxSet : dataPoints) {
              int j = 0;
  
              for (ArrayList<Float> box : boxSet) {
                  dataset.add(box, titles.get(i), categories.get(i).get(j));
                  j++;
              }
  
              i++;
          }
  
          return dataset;
      }
  
      // ****************************************************************************
      // * JFREECHART DEVELOPER GUIDE                                               *
      // * The JFreeChart Developer Guide, written by David Gilbert, is available   *
      // * to purchase from Object Refinery Limited:                                *
      // *                                                                          *
      // * http://www.object-refinery.com/jfreechart/guide.html                     *
      // *                                                                          *
      // * Sales are used to provide funding for the JFreeChart project - please    * 
      // * support us so that we can continue developing free software.             *
      // ****************************************************************************
      /**
       * For testing from the command line.
       *
       * @param args ignored.
       */
      public void save2File(File outputFile) throws IOException {
          ChartUtilities cu = new ChartUtilities() {
          };
          ChartUtilities.saveChartAsPNG(outputFile, this.chartPanel.getChart(), 1200, 500);
          System.out.println("Saved at " + outputFile.toString() + " size = " + 1200 + "x" + 500);
      }
  
      public void updateChartData() {
          this.printable = false;
  
          BoxAndWhiskerCategoryDataset dataset = (BoxAndWhiskerCategoryDataset) createDataset(this.dataPoints, this.categories, this.seriesTitles);
  
          final CategoryAxis xAxis = new CategoryAxis(this.xAxisTitle);
          final NumberAxis yAxis = new NumberAxis(this.yAxisTitle);
          yAxis.setAutoRangeIncludesZero(false);
          this.renderer = new BoxAndWhiskerRenderer();
          this.renderer.setFillBox(false);
          renderer.setToolTipGenerator(new BoxAndWhiskerToolTipGenerator());
          this.plot = new CategoryPlot(dataset, xAxis, yAxis, this.renderer);
  
          final JFreeChart chart = new JFreeChart(
                  this.chartTitle,
                  new Font("SansSerif", Font.BOLD, 14),
                  this.plot,
                  true
          );
          this.plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);
  