/*
 * PvalueDialog.java
 *
 * Created on April 15, 2008, 11:17 AM
 */

package org.statcato.dialogs.calc;

import org.statcato.*;
import org.statcato.utils.HelperFunctions;
import org.statcato.statistics.*;
import javax.swing.*;

/**
 * A dialog for computing p-Values of four types of distributions 
 * (normal, Student's t, chi-square, and F) and 
 * three types of tests (left-tail, right-tail, and two-tail), 
 * given the distribution parameters and test statistic.
 * 
 * @author  Margaret Yau
 * @version %I%, %G%
 * @since 1.0
 */
public class PvalueDialog extends StatcatoDialog {
    final int normal = 0;
    final int studentT = 1;
    final int chiSquare = 2;
    final int fisher = 3;
    final int leftTail = 0;
    final int rightTail = 1;
    final int twoTail = 2;
    
    /** Creates new form PvalueDialog */
    public PvalueDialog(java.awt.Frame parent, boolean modal, Statcato app) {
        super(parent, modal);
        this.app = app;
        initComponents();
        
        getRootPane().setDefaultButton(OKButton);
        setHelpFile("calc-pvalue");
        name = "p-Value";
        description = "For calculating p-values given the type of distribution," +
                " distribution parameters, and the type of test.";
        helpStrings.add("Select the type of distribution and enter its " +
                "parameters.");
        helpStrings.add("Select the type of test: left-, right-, or two-tailed");
        helpStrings.add("Enter the test statistic.");
    }
    
    /** 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() {

        InputsPanel = new javax.swing.JPanel();
        DistributionLabel = new javax.swing.JLabel();
        DistributionMenu = new javax.swing.JComboBox();
        TestTypeLabel = new javax.swing.JLabel();
        TestTypeMenu = new javax.swing.JComboBox();
        TestStatisticsLabel = new javax.swing.JLabel();
        TestStatisticsBox = new javax.swing.JTextField();
        DOF1Label = new javax.swing.JLabel();
        DOF2Label = new javax.swing.JLabel();
        DOF1Box = new javax.swing.JTextField();
        DOF2Box = new javax.swing.JTextField();
        TestStatisticsErrorLabel = new javax.swing.JLabel();
        DOF1ErrorLabel = new javax.swing.JLabel();
        DOF2ErrorLabel = new javax.swing.JLabel();
        ResultsPanel = new javax.swing.JPanel();
        ResultsText = new javax.swing.JLabel();
        ClearButton = new javax.swing.JButton();
        OKButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("p-Value");
        setMinimumSize(new java.awt.Dimension(640, 271));

        InputsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Inputs", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        DistributionLabel.setText("Distribution:");

        DistributionMenu.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Normal", "Student's t", "Chi-square", "F (Fisher)" }));
        DistributionMenu.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                DistributionMenuItemStateChanged(evt);
            }
        });

        TestTypeLabel.setText("Type of Test:");

        TestTypeMenu.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Left-tail", "Right-tail", "Two-tail" }));
        TestTypeMenu.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                TestTypeMenuItemStateChanged(evt);
            }
        });

        TestStatisticsLabel.setText("Test Statistic:");

        TestStatisticsBox.setToolTipText("Enter a valid number");
        TestStatisticsBox.setInputVerifier(new TestStatisticsFieldVerifier());
        TestStatisticsBox.setMinimumSize(new java.awt.Dimension(30, 22));

        DOF1Label.setText("Degrees of Freedom:");

        DOF2Label.setText("Degrees of Freedom 2:");

        DOF1Box.setToolTipText("Enter a positive integer");
        DOF1Box.setInputVerifier(new DOF1FieldVerifier());

        DOF2Box.setToolTipText("Enter a positive integer");
        DOF2Box.setInputVerifier(new DOF2FieldVerifier());

        TestStatisticsErrorLabel.setBackground(new java.awt.Color(255, 255, 255));
        TestStatisticsErrorLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        TestStatisticsErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
        TestStatisticsErrorLabel.setText("Enter a valid number");

        DOF1ErrorLabel.setBackground(new java.awt.Color(255, 255, 255));
        DOF1ErrorLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        DOF1ErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
        DOF1ErrorLabel.setText("Enter a positive integer");

        DOF2ErrorLabel.setBackground(new java.awt.Color(255, 255, 255));
        DOF2ErrorLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        DOF2ErrorLabel.setForeground(new java.awt.Color(255, 0, 0));
        DOF2ErrorLabel.setText("Enter a positive integer");

        javax.swing.GroupLayout InputsPanelLayout = new javax.swing.GroupLayout(InputsPanel);
        InputsPanel.setLayout(InputsPanelLayout);
        InputsPanelLayout.setHorizontalGroup(
            InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(InputsPanelLayout.createSequentialGroup()
                .addGap(15, 15, 15)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(DistributionLabel, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(TestTypeLabel, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(TestStatisticsLabel, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(DOF1Label, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(DOF2Label, javax.swing.GroupLayout.Alignment.TRAILING))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(TestStatisticsBox, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(DOF1Box, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(DOF2Box, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(TestTypeMenu, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(DistributionMenu, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(DOF2ErrorLabel)
                    .addComponent(TestStatisticsErrorLabel)
                    .addComponent(DOF1ErrorLabel))
                .addContainerGap(19, Short.MAX_VALUE))
        );

        InputsPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {DOF1Box, DOF2Box, TestStatisticsBox});

        InputsPanelLayout.setVerticalGroup(
            InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(InputsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(DistributionLabel)
                    .addComponent(DistributionMenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(10, 10, 10)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(TestTypeLabel)
                    .addComponent(TestTypeMenu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(TestStatisticsLabel)
                    .addComponent(TestStatisticsErrorLabel)
                    .addComponent(TestStatisticsBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(DOF1Label)
                    .addComponent(DOF1Box, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(DOF1ErrorLabel))
                .addGap(18, 18, 18)
                .addGroup(InputsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(DOF2Label)
                    .addComponent(DOF2Box, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(DOF2ErrorLabel))
                .addGap(12, 12, 12))
        );

        DOF1Label.setVisible(false);
        DOF2Label.setVisible(false);
        DOF1Box.setVisible(false);
        DOF2Box.setVisible(false);
        TestStatisticsErrorLabel.setVisible(false);
        DOF1ErrorLabel.setVisible(false);
        DOF2ErrorLabel.setVisible(false);

        ResultsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Results", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 14))); // NOI18N

        ResultsText.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        ResultsText.setText("P-value=");
        ResultsText.setVerticalAlignment(javax.swing.SwingConstants.TOP);

        javax.swing.GroupLayout ResultsPanelLayout = new javax.swing.GroupLayout(ResultsPanel);
        ResultsPanel.setLayout(ResultsPanelLayout);
        ResultsPanelLayout.setHorizontalGroup(
            ResultsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ResultsPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(ResultsText, javax.swing.GroupLayout.PREFERRED_SIZE, 207, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        ResultsPanelLayout.setVerticalGroup(
            ResultsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(ResultsPanelLayout.createSequentialGroup()
                .addComponent(ResultsText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        ResultsPanel.setVisible(false);

        ClearButton.setText("Clear");
        ClearButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ClearButtonActionPerformed(evt);
            }
        });

        OKButton.setText("Compute");
        OKButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                OKButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(InputsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ResultsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(238, 238, 238)
                        .addComponent(OKButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ClearButton)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {ClearButton, OKButton});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(InputsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(ResultsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(OKButton)
                    .addComponent(ClearButton))
                .addGap(21, 21, 21))
        );

        pack();
    }// //GEN-END:initComponents

    private void DistributionMenuItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_DistributionMenuItemStateChanged
        // DistributionMenu item changed
        
        // normal
        if (evt.getItem() == (String) DistributionMenu.getItemAt(normal)) {
            //System.out.println("normal");
            DOF1Label.setVisible(false);
            DOF1Box.setVisible(false);
            DOF2Label.setVisible(false);
            DOF2Box.setVisible(false);
        }
        // student t
        else if (evt.getItem() == (String) DistributionMenu.getItemAt(studentT)) {
            //System.out.println("student t");
            DOF1Label.setVisible(true);
            DOF1Label.setText("Degrees of Freedom:");
            DOF1Box.setVisible(true);
            DOF1Box.setText("");
            DOF2Label.setVisible(false);
            DOF2Box.setVisible(false);
        }
        // chi-square
        else if (evt.getItem() == (String) DistributionMenu.getItemAt(chiSquare)) {
            //System.out.println("chi-square");
            DOF1Label.setVisible(true);
            DOF1Label.setText("Degrees of Freedom:");
            DOF1Box.setVisible(true);
            DOF1Box.setText("");
            DOF2Label.setVisible(false);
            DOF2Box.setVisible(false);
        }
        // Fisher
        else {
            //System.out.println("fisher");
            DOF1Label.setVisible(true);
            DOF1Label.setText("Degrees of Freedom 1:");
            DOF1Box.setVisible(true);
            DOF1Box.setText("");
            DOF2Label.setVisible(true);
            DOF2Box.setVisible(true);
            DOF2Box.setText("");
        }
        ResultsPanel.setVisible(false);
        pack();
    }//GEN-LAST:event_DistributionMenuItemStateChanged

    private void TestTypeMenuItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_TestTypeMenuItemStateChanged
       ResultsPanel.setVisible(false);
    }//GEN-LAST:event_TestTypeMenuItemStateChanged

    private void ClearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ClearButtonActionPerformed
        // ClearButton is pressed -> restore all inputs to default
        // normal, left-tail, all text fields empty
        DistributionMenu.setSelectedIndex(0);
        TestTypeMenu.setSelectedIndex(0);
        TestStatisticsBox.setText("");
        DOF1Box.setVisible(false);
        DOF1Box.setText("");
        DOF1ErrorLabel.setVisible(false);
        DOF1Label.setVisible(false);
        DOF2Box.setVisible(false);
        DOF2Box.setText("");
        DOF2ErrorLabel.setVisible(false);
        DOF2Label.setVisible(false);
        ResultsPanel.setVisible(false);
        pack();
    }//GEN-LAST:event_ClearButtonActionPerformed

    private void OKButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OKButtonActionPerformed
        app.compoundEdit = new DialogEdit("p value");
        
        // OKButton is pressed -> compute p-value
        double area, pvalue;
        double testStatistics = 0;
        int dof1 = 0, dof2 = 0;
        boolean inputError = false;
        String results = "";
        String TestStatisticsText = "";
        String DistributionText = "";
        String TestTypeText = "";
        String DOF1Text = "";
        String DOF2Text = "";
        String CumProbText = "";
        String PValueText = "";
        
        try {
            testStatistics = Double.parseDouble(TestStatisticsBox.getText());
            if (DistributionMenu.getSelectedIndex() == chiSquare || DistributionMenu.getSelectedIndex() == fisher) {
                // check if ts is negative
                if (testStatistics < 0) {
                    inputError = true;
                    TestStatisticsErrorLabel.setVisible(true);
                }
            }
        } catch (NumberFormatException e) {
            inputError = true;
            TestStatisticsErrorLabel.setVisible(true);
        }
        
        /* DISTRIBUTION */
        // normal
        if (DistributionMenu.getSelectedIndex() == normal) {
            //area = SpecialFunctions.cumNorm(testStatistics);
            NormalProbabilityDistribution npd = new NormalProbabilityDistribution(0, 1);
            area = npd.cumulativeProbability(testStatistics);
            DistributionText += "Distribution = Normal
"; } // student t else if (DistributionMenu.getSelectedIndex() == studentT) { try { dof1 = Integer.parseInt(DOF1Box.getText()); if (dof1 <= 0) { inputError = true; DOF1ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { inputError = true; DOF1ErrorLabel.setVisible(true); } StudentTProbabilityDistribution dist = new StudentTProbabilityDistribution(dof1); //area = SpecialFunctions.cumT(testStatistics, dof1); area = dist.cumulativeProbability(testStatistics); DistributionText += "Distribution = Student's t
"; DOF1Text += "Degree of freedom = " + dof1 + "
"; } // chi-square else if (DistributionMenu.getSelectedIndex() == chiSquare) { try { dof1 = Integer.parseInt(DOF1Box.getText()); if (dof1 <= 0) { inputError = true; DOF1ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { inputError = true; DOF1ErrorLabel.setVisible(true); } ChiSquareProbabilityDistribution dist = new ChiSquareProbabilityDistribution(dof1); //area = SpecialFunctions.cumChiSquare(testStatistics, dof1); area = dist.cumulativeProbability(testStatistics); DistributionText += "Distribution = Chi-square
"; DOF1Text += "Degree of freedom = " + dof1 + "
"; } // Fisher else { try { dof1 = Integer.parseInt(DOF1Box.getText()); if (dof1 <= 0) { inputError = true; DOF1ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { inputError = true; DOF1ErrorLabel.setVisible(true); } try { dof2 = Integer.parseInt(DOF2Box.getText()); if (dof2 <= 0) { inputError = true; DOF2ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { inputError = true; DOF2ErrorLabel.setVisible(true); } FProbabilityDistribution dist = new FProbabilityDistribution(dof1, dof2); //area = SpecialFunctions.cumF(testStatistics, dof1, dof2); area = dist.cumulativeProbability(testStatistics); DistributionText += "Distribution = Fisher
"; DOF1Text += "Degree of freedom 1 = " + dof1 + "
"; DOF2Text += "Degree of freedom 2 = " + dof2 + "
"; } /* TYPE OF TEST */ // left tail if (TestTypeMenu.getSelectedIndex() == leftTail) { pvalue = area; TestTypeText += "Type of Test = Left-tail
"; } // right tail else if (TestTypeMenu.getSelectedIndex() == rightTail) { pvalue = 1 - area; TestTypeText += "Type of Test = Right-tail
"; } // two tail else { pvalue = 2* Math.min(area, 1-area); TestTypeText += "Type of Test = Two-tail
"; } if (!inputError) { TestStatisticsText += "Test Statistic = " + HelperFunctions.formatFloat(testStatistics, 4) + "
"; PValueText += "p-Value = "; CumProbText += "Cumulative Probability = " + HelperFunctions.formatFloat(area, 4) + "
"; // p-value can never be 0 for normal or t distribution if (DistributionMenu.getSelectedIndex() == normal || DistributionMenu.getSelectedIndex() == studentT) { if (pvalue == 0) { PValueText += "0+"; } else PValueText += HelperFunctions.formatFloat(pvalue, 4); } // p-value can never be 0 when the test statistic is positive // for the chi-square and F distribution else { if (testStatistics > 0 && pvalue == 0) { PValueText += "0+"; } else PValueText += HelperFunctions.formatFloat(pvalue, 4); } // display results results += DistributionText + TestTypeText + TestStatisticsText; results += DOF1Text + DOF2Text + CumProbText + PValueText; app.addLogParagraph("Computing p-Value", results); app.compoundEdit.end(); app.addCompoundEdit(app.compoundEdit); ResultsText.setText("" + results + ""); ResultsPanel.setVisible(true); TestStatisticsErrorLabel.setVisible(false); DOF1ErrorLabel.setVisible(false); DOF2ErrorLabel.setVisible(false); toFront(); setVisible(true); } }//GEN-LAST:event_OKButtonActionPerformed class TestStatisticsFieldVerifier extends InputVerifier { @Override public boolean verify(JComponent input) { JTextField tf = (JTextField) input; boolean ok = true; try { double ts = Double.parseDouble(tf.getText()); if (DistributionMenu.getSelectedIndex() == chiSquare || DistributionMenu.getSelectedIndex() == fisher) { // check if input is non-negative if (ts < 0) { ok = false; TestStatisticsErrorLabel.setVisible(true); } else TestStatisticsErrorLabel.setVisible(false); } else TestStatisticsErrorLabel.setVisible(false); } catch (NumberFormatException e) { ok = false; TestStatisticsErrorLabel.setVisible(true); } return ok; } } class DOF1FieldVerifier extends InputVerifier { @Override public boolean verify(JComponent input) { JTextField tf = (JTextField) input; boolean ok = true; try { int dof = Integer.parseInt(tf.getText()); DOF1ErrorLabel.setVisible(false); if (dof <= 0) { ok = false; DOF1ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { ok = false; DOF1ErrorLabel.setVisible(true); } return ok; } } class DOF2FieldVerifier extends InputVerifier { @Override public boolean verify(JComponent input) { JTextField tf = (JTextField) input; boolean ok = true; try { int dof = Integer.parseInt(tf.getText()); DOF2ErrorLabel.setVisible(false); if (dof <= 0) { ok = false; DOF2ErrorLabel.setVisible(true); } } catch (NumberFormatException e) { ok = false; DOF2ErrorLabel.setVisible(true); } return ok; } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton ClearButton; private javax.swing.JTextField DOF1Box; private javax.swing.JLabel DOF1ErrorLabel; private javax.swing.JLabel DOF1Label; private javax.swing.JTextField DOF2Box; private javax.swing.JLabel DOF2ErrorLabel; private javax.swing.JLabel DOF2Label; private javax.swing.JLabel DistributionLabel; private javax.swing.JComboBox DistributionMenu; private javax.swing.JPanel InputsPanel; private javax.swing.JButton OKButton; private javax.swing.JPanel ResultsPanel; private javax.swing.JLabel ResultsText; private javax.swing.JTextField TestStatisticsBox; private javax.swing.JLabel TestStatisticsErrorLabel; private javax.swing.JLabel TestStatisticsLabel; private javax.swing.JLabel TestTypeLabel; private javax.swing.JComboBox TestTypeMenu; // End of variables declaration//GEN-END:variables }

Ads help maintain this website.