public void resetSelected() {
    selected = 0;

    Population population = selectedPopulationHolder.getSelectedPopulation();
    if (population == null) return;

    updateSelected(population);
  }
  public void mouseClicked(MouseEvent evt) {
    Population population = selectedPopulationHolder.getSelectedPopulation();
    if (population == null) return;

    int y = evt.getY();

    // if (y<0) return;
    selected = y / FONT_SIZE;

    updateSelected(population);

    this.requestFocus();
    this.repaint();
  }
  public void keyPressed(KeyEvent evt) {
    // System.out.println("Key Pressed");
    int code = evt.getKeyCode();

    Population population = selectedPopulationHolder.getSelectedPopulation();
    if (population == null) return;

    // Individual individual = selectedIndividualHolder.getSelectedIndividual();

    if (code == KeyEvent.VK_UP) {
      if (selected > 0) selected--;
    } else if (code == KeyEvent.VK_DOWN) {
      if (selected < population.getNumberOfIndividuals() - 1) selected++;
    }

    updateSelected(population);

    // if ((selected < 0) || (selected > population.getNumberOfIndividuals()))
    // selectedIndividualHolder.setSelectedIndividual(null);
    // else selectedIndividualHolder.setSelectedIndividual(population.getIndividual(selected));

    this.repaint();
  }
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // g.drawString("Hello", 100, 100);

    Population population = selectedPopulationHolder.getSelectedPopulation();

    if (population == null) return;

    GeneticAlgorithmIndividualToEvaluate[] individuals = population.getAllIndividuals();

    Rectangle rectangle = this.getVisibleRect();
    int i_min = (rectangle.y) / FONT_SIZE - 1;
    int i_max = (rectangle.y + rectangle.height) / FONT_SIZE + 1;
    int size = individuals.length;

    i_min = Math.max(i_min, 0);
    i_min = Math.min(i_min, size);
    i_max = Math.max(i_max, 0);
    i_max = Math.min(i_max, size);

    // for(int i=0; i<individuals.length; i++)
    // {
    for (int i = i_min; i < i_max; i++) {
      GeneticAlgorithmIndividualToEvaluate ind = individuals[i];

      if (selectedIndividualHolder.getSelectedIndividual() == ind) g.setColor(Color.red);
      else g.setColor(Color.black);

      g.drawString(ind.getName(), 2, i * FONT_SIZE + 10);

      if (ind.isEvaluationDone()) {
        double fitness = ind.getFitness();
        g.drawString(Double.toString(fitness), 200, i * FONT_SIZE + 10);
      }
    }
  }