/**
   * Controls actions for this window.
   *
   * @param oEvent ActionEvent.
   */
  public void actionPerformed(ActionEvent oEvent) {
    String sCommand = oEvent.getActionCommand();
    if (sCommand.equals("Cancel")) {
      this.setVisible(false);
      this.dispose();
    } else if (sCommand.equals("OK")) {

      try {
        // Capture any in-process edits
        if (m_oTable.isEditing()) {
          m_oTable
              .getCellEditor(m_oTable.getEditingRow(), m_oTable.getEditingColumn())
              .stopCellEditing();
        }

        // Extract the data and feed it back to allometry
        BehaviorParameterDisplay oNew = new BehaviorParameterDisplay();
        oNew.mp_oTableData = new ArrayList<TableData>(1);
        oNew.mp_oTableData.add(m_oTable.getData());
        ArrayList<BehaviorParameterDisplay> oToAdd = new ArrayList<BehaviorParameterDisplay>(1);
        oToAdd.add(oNew);
        m_oAllom.readDataFromDisplay(oToAdd, m_oPop);
        m_oParentEdit.refreshParametersDisplay();
        this.setVisible(false);
        this.dispose();
      } catch (ModelException oErr) {
        ErrorGUI oHandler = new ErrorGUI(this);
        oHandler.writeErrorMessage(oErr);
      }
    }
  }
  /**
   * Performs actions for the controls in the Histogram window.
   *
   * @param oEvent Event triggered.
   */
  public void actionPerformed(ActionEvent oEvent) {
    try {
      if (oEvent.getSource() instanceof JCheckBox) {
        JCheckBox jBox = (JCheckBox) oEvent.getSource();
        if (jBox.getName().equals("log_checkbox")) {
          if (jBox.isSelected() != m_bUseLogarithmicAxis) {
            m_bUseLogarithmicAxis = jBox.isSelected();
            updateChart(m_oManager.getLegend());
          }
        } else if (jBox.getName().equals("total_checkbox")) {
          if (jBox.isSelected() != m_bShowTotal) {
            m_bShowTotal = jBox.isSelected();

            // If the dataset already exists, simply calling an update will
            // have no effect; so either remove or add the series, as
            // requested
            if (m_oDataset != null && m_oDataset.getSeriesCount() > 0) {
              if (m_bShowTotal == true) {
                m_oDataset.addTotalSeries();
              } else {
                for (int i = 0; i < m_oDataset.getSeriesCount(); i++) {
                  if (((String) m_oDataset.getSeriesKey(i)).equalsIgnoreCase("total")) {
                    m_oDataset.removeSeries(i);
                    break;
                  }
                }
              }
            }
            updateChart(m_oManager.getLegend());
          }
        }
      } else if (oEvent.getActionCommand().equals("UpdateBins")) {

        // Make sure the values in the bins are recognizable, greater-than-zero numbers
        int iNumBins = 0;
        float fBinSize = 0;
        JTextField jNumBins =
            (JTextField)
                DataGrapher.findNamedComponent(m_oChartFrame.getContentPane(), NUMBER_BINS_NAME);
        JTextField jBinSize =
            (JTextField)
                DataGrapher.findNamedComponent(m_oChartFrame.getContentPane(), BIN_SIZE_NAME);
        try {
          Integer oNumBins = new Integer(jNumBins.getText());
          Float oBinSize = new Float(jBinSize.getText());
          iNumBins = oNumBins.intValue();
          fBinSize = oBinSize.floatValue();
        } catch (java.lang.NumberFormatException oErr) {
          JOptionPane.showMessageDialog(
              m_oChartFrame,
              "The value for number of bins or bin size is not a recognized number.");
          jNumBins.setText(String.valueOf(m_iNumBins));
          jBinSize.setText(String.valueOf(m_fBinSize));
          return;
        }

        if (iNumBins <= 0 || fBinSize <= 0) {
          JOptionPane.showMessageDialog(
              m_oChartFrame,
              "The values for number of bins and bin size must be greater than zero.");
          jNumBins.setText(String.valueOf(m_iNumBins));
          jBinSize.setText(String.valueOf(m_fBinSize));
          return;
        }

        if (iNumBins != m_iNumBins || fBinSize != m_fBinSize) {
          m_iNumBins = iNumBins;
          m_fBinSize = fBinSize;

          // Clear the dataset to force a reconstruction
          m_oDataset = null;
          m_oDataset = new ModelHistogramDataset();

          m_bRecalcBinsOnUpdate = false;
          updateChart(m_oManager.getLegend());
        }
      }
      super.actionPerformed(oEvent);
    } catch (sortie.data.simpletypes.ModelException oErr) {
      ErrorGUI oHandler = new ErrorGUI(m_oChartFrame);
      oHandler.writeErrorMessage(oErr);
    }
  }