/** * Creates the histogram using data accumulated thus far. * * @param oLegend Legend for this chart. * @param sChartTitle Title for this chart. * @return The new chart window. * @throws sortie.data.simpletypes.ModelException Passing through underlying exceptions. */ ModelInternalFrame drawChart(Legend oLegend, String sChartTitle) throws ModelException { int i; ModelHistogramDataset oAdjustedDataset = updateForVisible(oLegend); // Make the chart m_oChartFrame = DataGrapher.drawHistogram( oAdjustedDataset, m_sLabel, "Total Number", sChartTitle, oLegend, this); // Add the extra controls to the top of the histogram window JPanel jLine1Controls = new JPanel(new FlowLayout(FlowLayout.LEFT)); // Bins boxes JLabel jTemp = new JLabel("Number of bins:"); jTemp.setFont(new sortie.gui.components.SortieFont()); jLine1Controls.add(jTemp); JTextField jNumBins = new JTextField(String.valueOf(m_iNumBins)); jNumBins.setFont(new SortieFont()); jNumBins.setPreferredSize( new java.awt.Dimension(50, (int) jNumBins.getPreferredSize().getHeight())); jNumBins.setName(NUMBER_BINS_NAME); jLine1Controls.add(jNumBins); jTemp = new JLabel("Bin size:"); jTemp.setFont(new sortie.gui.components.SortieFont()); jLine1Controls.add(jTemp); JTextField jBinSize = new JTextField(m_jFormat.format(m_fBinSize)); jBinSize.setFont(new SortieFont()); jBinSize.setPreferredSize( new java.awt.Dimension(50, (int) jBinSize.getPreferredSize().getHeight())); jBinSize.setName(BIN_SIZE_NAME); jLine1Controls.add(jBinSize); // Button to change JButton jButton = new JButton("Change"); jButton.setFont(new sortie.gui.components.SortieFont()); jButton.setActionCommand("UpdateBins"); jButton.addActionListener(this); jLine1Controls.add(jButton); // Checkbox for logarithmic axis JCheckBox jCheckBox = new JCheckBox("Use Logarithmic Axis", getUseLogarithmicAxis()); jCheckBox.setFont(new SortieFont()); jCheckBox.setName("log_checkbox"); jCheckBox.addActionListener(this); jLine1Controls.add(jCheckBox); // Checkbox for showing total bars jCheckBox = new JCheckBox("Show Totals", m_bShowTotal); jCheckBox.setFont(new sortie.gui.components.SortieFont()); jCheckBox.setName("total_checkbox"); jCheckBox.addActionListener(this); jLine1Controls.add(jCheckBox); JPanel jLine2Controls = new JPanel(new FlowLayout(FlowLayout.LEFT)); jTemp = new JLabel("Min value:"); jTemp.setFont(new sortie.gui.components.SortieFont()); jLine2Controls.add(jTemp); m_jMinDatasetValue.setFont(new sortie.gui.components.SortieFont()); if (m_bIsInt) m_jMinDatasetValue.setText(String.valueOf((int) m_fDatasetMin)); else m_jMinDatasetValue.setText(String.valueOf(m_jFormat.format(m_fDatasetMin))); jLine2Controls.add(m_jMinDatasetValue); jTemp = new JLabel("Max value:"); jTemp.setFont(new sortie.gui.components.SortieFont()); jLine2Controls.add(jTemp); m_jMaxDatasetValue.setFont(new sortie.gui.components.SortieFont()); if (m_bIsInt) m_jMaxDatasetValue.setText(String.valueOf((int) m_fDatasetMax)); else m_jMaxDatasetValue.setText(String.valueOf(m_jFormat.format(m_fDatasetMax))); jLine2Controls.add(m_jMaxDatasetValue); // Remove the chart, which is the content panel org.jfree.chart.ChartPanel jChart = null; for (i = 0; i < m_oChartFrame.getContentPane().getComponentCount(); i++) { if (m_oChartFrame.getContentPane().getComponent(i) instanceof org.jfree.chart.ChartPanel) { jChart = (org.jfree.chart.ChartPanel) m_oChartFrame.getContentPane().getComponent(i); } } JPanel jControls = new JPanel(); jControls.setLayout(new BoxLayout(jControls, BoxLayout.PAGE_AXIS)); jControls.add(jLine1Controls); jControls.add(jLine2Controls); // Recreate the content pane with the controls and the chart JPanel jContentPanel = new JPanel(new java.awt.BorderLayout()); jContentPanel.setLayout(new java.awt.BorderLayout()); jContentPanel.add(jControls, java.awt.BorderLayout.NORTH); jContentPanel.add(jChart, java.awt.BorderLayout.CENTER); m_oChartFrame.setContentPane(jContentPanel); return m_oChartFrame; }