/*
* FrequencyTableDialog.java
*
* Created on August 1, 2008, 10:05 AM
*/
package org.statcato.dialogs.calc;
import org.statcato.*;
import org.statcato.spreadsheet.*;
import org.statcato.utils.HelperFunctions;
import org.statcato.statistics.BasicStatistics;
import java.util.*;
import javax.swing.*;
/**
* A dialog for creating a frequency table for a given set of data.
*
* @author Margaret Yau
* @version %I%, %G%
* @since 1.0
*/
public class FrequencyTableDialog extends StatcatoDialog {
/** Creates new form FrequencyTableDialog */
public FrequencyTableDialog(java.awt.Frame parent, boolean modal,
Statcato app) {
super(parent, modal);
this.app = app;
ParentSpreadsheet = app.getSpreadsheet();
initComponents();
customInitComponents();
}
private void customInitComponents() {
ParentSpreadsheet.populateComboBox(SourceComboBox);
ParentSpreadsheet.populateComboBox(LimitComboBox);
ButtonGroup group = new ButtonGroup();
group.add(CatRadioButton);
group.add(ClassRadioButton);
group.add(Class2RadioButton);
group.add(AutoRadioButton);
getRootPane().setDefaultButton(OKButton);
setHelpFile("calc-freqtable");
name = "Frequency Table";
description = "For computing frqeuencies of data values.";
helpStrings.add("Select the column containing data for which frequencies" +
" will be computed.");
helpStrings.add("Select the method for computing frequency data.");
helpStrings.add("Select the columns in which the frequency results " +
"are to be stored.");
}
/**
* Updates elements on the dialog so that they have the most
* current values. Called by {@link #setVisible} to make
* sure the dialog displays current values when made visible again.
*
* @see #setVisible(boolean)
*/
@Override
public void updateElements() {
updateComboBox(SourceComboBox);
updateComboBox(LimitComboBox);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// //GEN-BEGIN:initComponents
private void initComponents() {
OKButton = new javax.swing.JButton();
CancelButton = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
SourceComboBox = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
NumClassTextField = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
Class2RadioButton = new javax.swing.JRadioButton();
jLabel11 = new javax.swing.JLabel();
FirstLimitTextField = new javax.swing.JTextField();
ClassWidthTextField = new javax.swing.JTextField();
CatRadioButton = new javax.swing.JRadioButton();
LimitComboBox = new javax.swing.JComboBox();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
ClassRadioButton = new javax.swing.JRadioButton();
jLabel8 = new javax.swing.JLabel();
AutoRadioButton = new javax.swing.JRadioButton();
jPanel3 = new javax.swing.JPanel();
FrequencyTextField = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
CategoryTextField = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Compute Frequency Table");
OKButton.setText("OK");
OKButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
OKButtonActionPerformed(evt);
}
});
CancelButton.setText("Cancel");
CancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CancelButtonActionPerformed(evt);
}
});
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Input"));
jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel3.setText("Source Data");
jLabel1.setText("Compute frequency data for column:");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel3)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(33, 33, 33)
.addComponent(SourceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(16, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(SourceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Computing Frequencies"));
NumClassTextField.setEnabled(false);
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel2.setText("Method of Computing Frequencies");
Class2RadioButton.setText("Source data contains numerical data.");
Class2RadioButton.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
Class2RadioButtonStateChanged(evt);
}
});
jLabel11.setText("(optional)");
FirstLimitTextField.setEnabled(false);
ClassWidthTextField.setEnabled(false);
CatRadioButton.setText("Treat source data as categories. Count the frequency of each category.");
CatRadioButton.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
CatRadioButtonItemStateChanged(evt);
}
});
LimitComboBox.setEnabled(false);
jLabel9.setText("Class width:");
jLabel10.setText("Number of classes:");
ClassRadioButton.setText("Source data contains numerical data. Count the frequency of each class,
where the upper class limits are in column:");
ClassRadioButton.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
ClassRadioButtonItemStateChanged(evt);
}
});
jLabel8.setText("First upper class limit:");
AutoRadioButton.setSelected(true);
AutoRadioButton.setText("Source data contains numerical data. Automatically use 10 classes,
with the first lower class limit decided by the minimum value.\n");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ClassRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 387, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(AutoRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)
.addComponent(CatRadioButton)
.addComponent(Class2RadioButton)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jLabel8))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(45, 45, 45)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel9)
.addComponent(jLabel10))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(FirstLimitTextField)
.addComponent(ClassWidthTextField)
.addComponent(NumClassTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 56, Short.MAX_VALUE))
.addGap(10, 10, 10)
.addComponent(jLabel11))))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(68, 68, 68)
.addComponent(LimitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CatRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ClassRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(LimitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(3, 3, 3)
.addComponent(Class2RadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(FirstLimitTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(ClassWidthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10)
.addComponent(NumClassTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel11))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(AutoRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(19, Short.MAX_VALUE))
);
jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Results"));
jLabel6.setText("Frequency column:");
jLabel5.setText("Category column:");
jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
jLabel4.setText("Store Frequency Table in");
jLabel7.setText("e.g. C1 or variable name");
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(4, 4, 4)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel6, javax.swing.GroupLayout.Alignment.TRAILING))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(CategoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(FrequencyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jLabel4)
.addComponent(jLabel7, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(CategoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(FrequencyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel7)
.addContainerGap(79, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(OKButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CancelButton))
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {CancelButton, OKButton});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(OKButton)
.addComponent(CancelButton))
.addContainerGap())
);
pack();
}// //GEN-END:initComponents
@SuppressWarnings("unchecked")
private void OKButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OKButtonActionPerformed
app.compoundEdit = new DialogEdit("frequency table");
// check for incomplete input data
if (SourceComboBox.getSelectedIndex() == 0) {
app.showErrorDialog("Select the column containing the source data.");
return;
}
if (ClassRadioButton.isSelected() && LimitComboBox.getSelectedIndex() == 0) {
app.showErrorDialog("Select the column containing upper class limits.");
return;
}
// get data from source column
String source = SourceComboBox.getSelectedItem().toString();
int sourceColumn = ParentSpreadsheet.parseColumnNumber(source);
String text = "";
text += "Source column: " + source + "
";
Vector CellColumnVector = null;
Vector ColumnVector = null;
CellColumnVector = ParentSpreadsheet.getColumn(sourceColumn);
CellColumnVector = HelperFunctions.removeNullCells(CellColumnVector);
if (ClassRadioButton.isSelected() || Class2RadioButton.isSelected() ||
AutoRadioButton.isSelected()) {
// check that input column contain only numerical data
ColumnVector = HelperFunctions.ConvertInputVectorToDoubles(CellColumnVector);
if (ColumnVector == null) {
app.showErrorDialog("Invalid input column " + source +
": all data must be numbers.");
return;
}
}
int storeCatColumnNum, storeFreqColumnNum;
String StoreCatColumn = CategoryTextField.getText();
// check if Column is valid
storeCatColumnNum = ParentSpreadsheet.getColumnNumber(StoreCatColumn);
if (storeCatColumnNum == -1) { // invalid column
app.showErrorDialog("Enter a valid column name (e.g. C1) or a " +
"valid variable name to store the categories of the " +
"frequency table.");
return;
}
String StoreFreqColumn = FrequencyTextField.getText();
// check if column is valid
storeFreqColumnNum = ParentSpreadsheet.getColumnNumber(StoreFreqColumn);
if (storeFreqColumnNum == -1) { // invalid column
app.showErrorDialog("Enter a valid column name (e.g. C1) or a " +
"valid variable name to store the frequencies of the " +
"frequency table.");
return;
}
text += "Category column: " + StoreCatColumn + " ";
text += "Frequency column: " + StoreFreqColumn;
// category data
if (CatRadioButton.isSelected()) {
Object[] returnValues =
HelperFunctions.ComputeCategoryFrequency(CellColumnVector);
Vector categories = (Vector)returnValues[0];
Vector frequencies = (Vector)returnValues[1];
ParentSpreadsheet.setCellColumn(storeCatColumnNum, categories);
ParentSpreadsheet.setColumn(storeFreqColumnNum,
HelperFunctions.ConvertDoubleVectorToString(frequencies));
}
// numerical data, upper class limits provided
else if (ClassRadioButton.isSelected()) {
// get class limits column
String classes = LimitComboBox.getSelectedItem().toString();
int classesColumn = ParentSpreadsheet.parseColumnNumber(classes);
// read class limits vector
Vector LimitsColumnVector;
Vector LimitsVector;
LimitsColumnVector = ParentSpreadsheet.getColumn(classesColumn);
LimitsColumnVector = HelperFunctions.removeNullCells(LimitsColumnVector);
LimitsVector =
HelperFunctions.ConvertInputVectorToDoubles(LimitsColumnVector);
if (LimitsVector == null) {
app.showErrorDialog("Invalid input column " + source +
" for class limits: all data must be numbers.");
return;
}
Vector frequencies = HelperFunctions.ComputeClassFrequency(
ColumnVector, LimitsVector);
Vector limits =
HelperFunctions.ConvertDoubleVectorToString(LimitsVector);
limits.addElement("+");
ParentSpreadsheet.setColumn(storeCatColumnNum, limits);
ParentSpreadsheet.setColumn(storeFreqColumnNum,
HelperFunctions.ConvertDoubleVectorToString(frequencies));
}
// numerical data, first lower class limit and class width provided
else if (Class2RadioButton.isSelected()) {
try {
double limit1 = Double.parseDouble(FirstLimitTextField.getText());
double width = Double.parseDouble(ClassWidthTextField.getText());
double max = BasicStatistics.max(ColumnVector);
int numClasses = -1;
if (!NumClassTextField.getText().equals("")) {
try {
numClasses = Integer.parseInt(NumClassTextField.getText());
if (numClasses <= 0)
throw new NumberFormatException();
}
catch (NumberFormatException e) {
app.showErrorDialog("Enter a positive integer for the " +
"number of classes.");
return;
}
}
// construct limits vector
Vector LimitsVector = new Vector();
double thisLimit = limit1;
int classes = 0;
LimitsVector.addElement(thisLimit);
classes++;
while (thisLimit < max && (numClasses == -1 || classes < numClasses)) {
thisLimit += width;
LimitsVector.addElement(thisLimit);
classes++;
}
Vector frequencies = HelperFunctions.ComputeClassFrequency(
ColumnVector, LimitsVector);
frequencies.removeElementAt(frequencies.size() - 1);
Vector limits =
HelperFunctions.ConvertDoubleVectorToString(LimitsVector);
ParentSpreadsheet.setColumn(storeCatColumnNum, limits);
ParentSpreadsheet.setColumn(storeFreqColumnNum,
HelperFunctions.ConvertDoubleVectorToString(frequencies));
}
catch (NumberFormatException e) {
app.showErrorDialog("Enter valid numbers for the first" +
" upper class limit and the class width.");
return;
}
}
// numerical data, automatically using 10 classes, with the first
// lower class limit decided by the minimum value
else {
double numClasses = 10;
double min = BasicStatistics.min(ColumnVector);
double max = BasicStatistics.max(ColumnVector);
double width = (max - min) / numClasses;
// construct limits vector
Vector LimitsVector = new Vector();
for (int i = 1; i <= numClasses; ++i) {
LimitsVector.addElement(min + i * width);
}
Vector frequencies = HelperFunctions.ComputeClassFrequency(
ColumnVector, LimitsVector);
frequencies.removeElementAt(frequencies.size() - 1);
Vector limits =
HelperFunctions.ConvertDoubleVectorToString(LimitsVector);
ParentSpreadsheet.setColumn(storeCatColumnNum, limits);
ParentSpreadsheet.setColumn(storeFreqColumnNum,
HelperFunctions.ConvertDoubleVectorToString(frequencies));
}
app.addLogParagraph("Frequency Table", text);
app.compoundEdit.end();
app.addCompoundEdit(app.compoundEdit);
setVisible(false);
}//GEN-LAST:event_OKButtonActionPerformed
private void CancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelButtonActionPerformed
setVisible(false);
}//GEN-LAST:event_CancelButtonActionPerformed
private void CatRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_CatRadioButtonItemStateChanged
if (CatRadioButton.isSelected()) {
//LimitComboBox.setEnabled(false);
}
else {
//LimitComboBox.setEnabled(true);
}
}//GEN-LAST:event_CatRadioButtonItemStateChanged
private void ClassRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_ClassRadioButtonItemStateChanged
if (ClassRadioButton.isSelected()) {
LimitComboBox.setEnabled(true);
}
else {
LimitComboBox.setEnabled(false);
}
}//GEN-LAST:event_ClassRadioButtonItemStateChanged
private void Class2RadioButtonStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_Class2RadioButtonStateChanged
if (Class2RadioButton.isSelected()) {
FirstLimitTextField.setEnabled(true);
ClassWidthTextField.setEnabled(true);
NumClassTextField.setEnabled(true);
}
else {
FirstLimitTextField.setEnabled(false);
ClassWidthTextField.setEnabled(false);
NumClassTextField.setEnabled(false);
}
}//GEN-LAST:event_Class2RadioButtonStateChanged
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JRadioButton AutoRadioButton;
private javax.swing.JButton CancelButton;
private javax.swing.JRadioButton CatRadioButton;
private javax.swing.JTextField CategoryTextField;
private javax.swing.JRadioButton Class2RadioButton;
private javax.swing.JRadioButton ClassRadioButton;
private javax.swing.JTextField ClassWidthTextField;
private javax.swing.JTextField FirstLimitTextField;
private javax.swing.JTextField FrequencyTextField;
private javax.swing.JComboBox LimitComboBox;
private javax.swing.JTextField NumClassTextField;
private javax.swing.JButton OKButton;
private javax.swing.JComboBox SourceComboBox;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
// End of variables declaration//GEN-END:variables
}
| | | |
Ads help maintain this website.