private void refresh() {
    guiCount.setText(String.valueOf(analyze.getCount()));
    guiSum.setText(FORMAT.format(analyze.getSum()));
    guiMinimum.setText(FORMAT.format(analyze.getMinimum()));
    guiMaximum.setText(FORMAT.format(analyze.getMaximum()));
    guiMean.setText(FORMAT.format(analyze.getMean()));
    guiMedian.setText(FORMAT.format(analyze.getMedian()));

    guiChart.removeAll();
    guiChart.add(new ChartPanel(getChart((Integer) guiDivision.getModel().getValue())));

    double[] values = analyze.getValues();
    Double[][] vals = new Double[values.length][1];

    for (int i = 0; i < values.length; i++) {
      vals[i][0] = values[i];
    }

    guiTable.setTableHeader(null);
    guiTable.setModel(
        new DefaultTableModel(vals, new String[] {""}) {

          @Override
          public Class<?> getColumnClass(int columnIndex) {
            return Double.class;
          }
        });
    guiTable.setShowGrid(false, false);
    guiTable.setHighlighters(
        new Highlighter[] {
          HighlighterFactory.createAlternateStriping(Color.white, HighlighterFactory.QUICKSILVER, 1)
        });
    guiTable.revalidate();
    guiTable.repaint();

    guiTable.setEditable(analyze.getMethod() == METHOD.MANUAL);

    guiTable
        .getModel()
        .addTableModelListener(
            new TableModelListener() {

              @Override
              public void tableChanged(TableModelEvent e) {
                double[] values = new double[guiTable.getModel().getRowCount()];
                for (int i = 0; i < values.length; i++) {
                  values[i] = Double.valueOf(guiTable.getModel().getValueAt(i, 0).toString());
                }

                analyze.setValues(values);
              }
            });

    guiMethod.setSelectedItem(analyze.getMethod());
  }
  public JFreeChart getChart(final int nbDivision) {
    XYSeries series = new XYSeries("Data");

    double before = analyze.getMinimum();
    for (float i = 1; i <= nbDivision; i++) {
      final double localmin = before;
      final double localmax =
          analyze.getMinimum() + (i / nbDivision) * (analyze.getMaximum() - analyze.getMinimum());
      before = localmax;
      long localsum = 0;

      for (Double d : analyze.getAllValues()) {
        if (i == 100) {
          // last element
          if (d >= localmin && d <= localmax) {
            localsum++;
          }
        } else {
          if (d >= localmin && d < localmax) {
            localsum++;
          }
        }
      }
      series.add(analyze.getMinimum() + (localmin + localmax) / 2, localsum);
    }

    XYSeriesCollection dataset = new XYSeriesCollection(series);

    JFreeChart chart =
        ChartFactory.createXYBarChart(
            "", "", false, "", dataset, PlotOrientation.VERTICAL, false, false, false);

    XYPlot plot = chart.getXYPlot();
    ((XYBarRenderer) plot.getRenderer()).setShadowVisible(false);
    ((XYBarRenderer) plot.getRenderer()).setUseYInterval(false);
    ((XYBarRenderer) plot.getRenderer()).setMargin(0);

    chart.getPlot().setBackgroundAlpha(0);
    chart.setBackgroundPaint(new Color(0f, 0f, 0f, 0f));

    return chart;
  }