/* * Copyright (c) 2012 Patrick Meyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.itemanalysis.jmetrik.graph.irt; import com.itemanalysis.jmetrik.gui.Jmetrik; import com.itemanalysis.jmetrik.gui.SelectTableDialog; import com.itemanalysis.jmetrik.model.SortedListModel; import com.itemanalysis.jmetrik.selector.MultipleSelectionPanel; import com.itemanalysis.jmetrik.sql.DataTableName; import com.itemanalysis.jmetrik.sql.DatabaseName; import com.itemanalysis.jmetrik.workspace.VariableChangeListener; import com.itemanalysis.psychometrics.data.VariableAttributes; import org.apache.log4j.Logger; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.util.ArrayList; public class IrtPlotDialog extends JDialog { private IrtPlotCommand command = null; private MultipleSelectionPanel vsp = null; private DatabaseName dbName = null; private DataTableName table = null; static Logger logger = Logger.getLogger("jmetrik-logger"); public boolean canRun = false; // Variables declaration - do not modify private JPanel axisPanel; private JRadioButton categoryRadioButton; private JPanel curveTypePanel; private JRadioButton expectedScoreRadioButton; private JCheckBox iccBox; private JCheckBox itemInfoBox; private JPanel itemPanel; private JPanel layoutPanel; private JCheckBox legendBox; private JLabel maxLabel; private JTextField maxTextField; private JLabel minLabel; private JTextField minTextField; private JPanel optionsPanel; private JCheckBox tccBox; private JCheckBox personSeBox; private JCheckBox personInfoBox; private JPanel personPanel; private JLabel pointsLabel; private JTextField pointsTextField; private JPanel responsePanel; private JLabel responseTableLebel; private JTextField responseTableTextField; private JButton selectTableButton; private JTabbedPane tabbedPane; private JLabel ObservedPointsLabel; private JTextField observedPointsTextfield; private ButtonGroup typeGroup; // End of variables declaration private JFileChooser outputLocationChooser; private String outputPath = ""; private SortedListModel listModel = null; private SelectTableDialog responseTableDialog = null; private boolean hasResponseData = false; /** Creates new form IrtPlotDialog */ public IrtPlotDialog(Jmetrik parent, DatabaseName dbName, DataTableName table, ArrayList<VariableAttributes> variables, SortedListModel<DataTableName> listModel) { super(parent, "IRT Plot", true); this.listModel = listModel; this.dbName=dbName; this.table=table; setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); //prevent running an analysis when window close button is clicked this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ canRun = false; } }); vsp = new MultipleSelectionPanel(); vsp.setVariables(variables); JButton b1 = vsp.getButton1(); b1.setText("Run"); b1.addActionListener(new RunActionListener()); JButton b2 = vsp.getButton2(); b2.setText("Cancel"); b2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { canRun=false; setVisible(false); } }); JButton b4 = vsp.getButton3(); b4.setText("Reset"); b4.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { vsp.reset(); } }); JButton b3 = vsp.getButton4(); b3.setText("Save"); b3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (outputLocationChooser == null) outputLocationChooser = new JFileChooser(); outputLocationChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); outputLocationChooser.setDialogType(JFileChooser.OPEN_DIALOG); outputLocationChooser.setDialogTitle("Select Location"); if (outputLocationChooser.showDialog(IrtPlotDialog.this, "OK") != JFileChooser.APPROVE_OPTION) { return; } File f = outputLocationChooser.getSelectedFile(); outputPath = f.getAbsolutePath().replaceAll("\\\\", "/"); } }); initComponents(); setResizable(false); setLocationRelativeTo(parent); } private void initComponents() { typeGroup = new ButtonGroup(); tabbedPane = new JTabbedPane(); optionsPanel = new JPanel(); itemPanel = new JPanel(); iccBox = new JCheckBox(); itemInfoBox = new JCheckBox(); legendBox = new JCheckBox(); personPanel = new JPanel(); tccBox = new JCheckBox(); personInfoBox = new JCheckBox(); personSeBox = new JCheckBox(); curveTypePanel = new JPanel(); categoryRadioButton = new JRadioButton(); expectedScoreRadioButton = new JRadioButton(); layoutPanel = new JPanel(); axisPanel = new JPanel(); minLabel = new JLabel(); minTextField = new JTextField(); maxTextField = new JTextField(); maxLabel = new JLabel(); pointsLabel = new JLabel(); pointsTextField = new JTextField(); responsePanel = new JPanel(); responseTableLebel = new JLabel(); responseTableTextField = new JTextField(); selectTableButton = new JButton(); ObservedPointsLabel = new JLabel(); observedPointsTextfield = new JTextField(); // setPreferredSize(new Dimension(434, 590)); tabbedPane.setPreferredSize(new Dimension(400, 275)); itemPanel.setBorder(BorderFactory.createTitledBorder("Item")); iccBox.setSelected(true); iccBox.setText("Characteristic curve"); itemInfoBox.setText("Information function"); legendBox.setSelected(true); legendBox.setText("Show legend"); GroupLayout itemPanelLayout = new GroupLayout(itemPanel); itemPanel.setLayout(itemPanelLayout); itemPanelLayout.setHorizontalGroup( itemPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(iccBox, GroupLayout.PREFERRED_SIZE, 161, GroupLayout.PREFERRED_SIZE) .addComponent(itemInfoBox, GroupLayout.PREFERRED_SIZE, 161, GroupLayout.PREFERRED_SIZE) .addComponent(legendBox, GroupLayout.PREFERRED_SIZE, 161, GroupLayout.PREFERRED_SIZE) ); itemPanelLayout.setVerticalGroup( itemPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(itemPanelLayout.createSequentialGroup() .addComponent(iccBox) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(itemInfoBox) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(legendBox) .addContainerGap()) ); personPanel.setBorder(BorderFactory.createTitledBorder("Person")); tccBox.setSelected(true); tccBox.setText("Characteristic curve"); personInfoBox.setText("Information function"); personSeBox.setText("Standard error"); GroupLayout personPanelLayout = new GroupLayout(personPanel); personPanel.setLayout(personPanelLayout); personPanelLayout.setHorizontalGroup( personPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(personPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(personPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(personInfoBox) .addComponent(personSeBox) .addComponent(tccBox)) .addContainerGap(23, Short.MAX_VALUE)) ); personPanelLayout.setVerticalGroup( personPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(personPanelLayout.createSequentialGroup() .addComponent(tccBox) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(personInfoBox) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(personSeBox) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); curveTypePanel.setBorder(BorderFactory.createTitledBorder("Curve Type")); typeGroup.add(categoryRadioButton); categoryRadioButton.setSelected(true); categoryRadioButton.setText("Category probability"); categoryRadioButton.setActionCommand("prob"); categoryRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(categoryRadioButton.isSelected()){ responseTableTextField.setEnabled(true); observedPointsTextfield.setEnabled(true); selectTableButton.setEnabled(true); } } }); typeGroup.add(expectedScoreRadioButton); expectedScoreRadioButton.setText("Expected score"); expectedScoreRadioButton.setActionCommand("expected"); expectedScoreRadioButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(expectedScoreRadioButton.isSelected()){ responseTableTextField.setEnabled(false); observedPointsTextfield.setEnabled(false); selectTableButton.setEnabled(false); } } }); GroupLayout curveTypePanelLayout = new GroupLayout(curveTypePanel); curveTypePanel.setLayout(curveTypePanelLayout); curveTypePanelLayout.setHorizontalGroup( curveTypePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(curveTypePanelLayout.createSequentialGroup() .addContainerGap() .addComponent(categoryRadioButton) .addGap(18, 18, 18) .addComponent(expectedScoreRadioButton) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); curveTypePanelLayout.setVerticalGroup( curveTypePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(curveTypePanelLayout.createSequentialGroup() .addContainerGap() .addGroup(curveTypePanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(categoryRadioButton) .addComponent(expectedScoreRadioButton)) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); GroupLayout optionsPanelLayout = new GroupLayout(optionsPanel); optionsPanel.setLayout(optionsPanelLayout); optionsPanelLayout.setHorizontalGroup( optionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(optionsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(optionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(curveTypePanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(optionsPanelLayout.createSequentialGroup() .addComponent(itemPanel, GroupLayout.PREFERRED_SIZE, 164, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(personPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) .addContainerGap(51, Short.MAX_VALUE)) ); optionsPanelLayout.setVerticalGroup( optionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(optionsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(optionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(itemPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(personPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(curveTypePanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap(41, Short.MAX_VALUE)) ); tabbedPane.addTab("Lines", optionsPanel); axisPanel.setBorder(BorderFactory.createTitledBorder("X-axis")); minLabel.setText("Min"); minTextField.setText("-5"); minTextField.setMaximumSize(new Dimension(50, 28)); minTextField.setMinimumSize(new Dimension(50, 28)); minTextField.setPreferredSize(new Dimension(50, 28)); maxTextField.setText("5"); maxTextField.setMaximumSize(new Dimension(50, 28)); maxTextField.setMinimumSize(new Dimension(50, 28)); maxTextField.setPreferredSize(new Dimension(50, 28)); maxLabel.setText("Max"); pointsLabel.setText("Points"); pointsTextField.setText("31"); pointsTextField.setMaximumSize(new Dimension(50, 28)); pointsTextField.setMinimumSize(new Dimension(50, 28)); pointsTextField.setPreferredSize(new Dimension(50, 28)); GroupLayout axisPanelLayout = new GroupLayout(axisPanel); axisPanel.setLayout(axisPanelLayout); axisPanelLayout.setHorizontalGroup( axisPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(axisPanelLayout.createSequentialGroup() .addGap(29, 29, 29) .addComponent(minLabel) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(minTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(maxLabel) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(maxTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(pointsLabel) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(pointsTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); axisPanelLayout.setVerticalGroup( axisPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(axisPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(axisPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(axisPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(pointsLabel) .addComponent(pointsTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addGroup(axisPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(minLabel) .addComponent(minTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(maxLabel) .addComponent(maxTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); responsePanel.setBorder(BorderFactory.createTitledBorder("Observed Responses")); responseTableLebel.setText("Response table"); responseTableTextField.setMaximumSize(new Dimension(150, 28)); responseTableTextField.setMinimumSize(new Dimension(150, 28)); responseTableTextField.setPreferredSize(new Dimension(150, 28)); selectTableButton.setText("Select"); selectTableButton.setMaximumSize(new Dimension(65, 28)); selectTableButton.setMinimumSize(new Dimension(65, 28)); selectTableButton.setPreferredSize(new Dimension(65, 28)); selectTableButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //TODO show table selection dialog responseTableDialog = new SelectTableDialog(IrtPlotDialog.this, dbName, listModel); responseTableDialog.setVisible(true); if(responseTableDialog.canRun()){ responseTableTextField.setText(responseTableDialog.getTableName().toString()); hasResponseData = true; }else{ hasResponseData = false; } } }); ObservedPointsLabel.setText("Number of bins"); observedPointsTextfield.setText("10"); observedPointsTextfield.setMaximumSize(new Dimension(50, 28)); observedPointsTextfield.setMinimumSize(new Dimension(50, 28)); observedPointsTextfield.setPreferredSize(new Dimension(50, 28)); GroupLayout responsePanelLayout = new GroupLayout(responsePanel); responsePanel.setLayout(responsePanelLayout); responsePanelLayout.setHorizontalGroup( responsePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(responsePanelLayout.createSequentialGroup() .addContainerGap() .addGroup(responsePanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING) .addComponent(ObservedPointsLabel) .addComponent(responseTableLebel)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(responsePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(responsePanelLayout.createSequentialGroup() .addComponent(responseTableTextField, GroupLayout.PREFERRED_SIZE, 150, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(selectTableButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addComponent(observedPointsTextfield, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); responsePanelLayout.setVerticalGroup( responsePanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(responsePanelLayout.createSequentialGroup() .addContainerGap() .addGroup(responsePanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(responseTableLebel) .addComponent(responseTableTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(selectTableButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(responsePanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(ObservedPointsLabel) .addComponent(observedPointsTextfield, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); GroupLayout layoutPanelLayout = new GroupLayout(layoutPanel); layoutPanel.setLayout(layoutPanelLayout); layoutPanelLayout.setHorizontalGroup( layoutPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(layoutPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(responsePanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(axisPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(51, Short.MAX_VALUE)) ); layoutPanelLayout.setVerticalGroup( layoutPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layoutPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(responsePanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(axisPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); tabbedPane.addTab("Points", layoutPanel); GroupLayout layout = new GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(vsp, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 400, GroupLayout.PREFERRED_SIZE)) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(vsp, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 250, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); tabbedPane.getAccessibleContext().setAccessibleName("Lines"); pack(); }// </editor-fold> // private void initComponents() { // GridBagConstraints gridBagConstraints; // // typeGroup = new ButtonGroup(); // itemPanel = new JPanel(); // iccBox = new JCheckBox(); // itemInfoBox = new JCheckBox(); // legendBox = new JCheckBox(); // personPanel = new JPanel(); // tccBox = new JCheckBox(); // personInfoBox = new JCheckBox(); // personSeBox = new JCheckBox(); // typePanel = new JPanel(); // probTypeButton = new JRadioButton(); // expectedButton = new JRadioButton(); // xaxisPanel = new JPanel(); // xminLabel = new JLabel(); // xMinText = new JTextField(); // xMaxLabel = new JLabel(); // xMaxText = new JTextField(); // xPointsLabel = new JLabel(); // pointsText = new JTextField(); // // setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // getContentPane().setLayout(new GridBagLayout()); // // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridwidth = 2; // gridBagConstraints.fill = GridBagConstraints.BOTH; // gridBagConstraints.insets = new Insets(5, 5, 0, 5); // getContentPane().add(vsp, gridBagConstraints); // // itemPanel.setBorder(BorderFactory.createTitledBorder("Item")); // itemPanel.setLayout(new GridLayout(3, 1, 5, 5)); // // iccBox.setSelected(true); // iccBox.setText("Characteristic curve"); // iccBox.setToolTipText("Item characteristic curve"); // itemPanel.add(iccBox); // // itemInfoBox.setText("Information function"); // itemInfoBox.setToolTipText("Item information function"); // itemPanel.add(itemInfoBox); // // legendBox.setSelected(true); // legendBox.setText("Show legend"); // legendBox.setToolTipText("Show legend on plot"); // itemPanel.add(legendBox); // // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 0; // gridBagConstraints.gridy = 1; // gridBagConstraints.fill = GridBagConstraints.BOTH; // gridBagConstraints.weightx = 1.0; // gridBagConstraints.insets = new Insets(0, 5, 5, 2); // getContentPane().add(itemPanel, gridBagConstraints); // // personPanel.setBorder(BorderFactory.createTitledBorder("Person")); // personPanel.setLayout(new GridLayout(3, 1, 5, 5)); // // tccBox.setSelected(true); // tccBox.setText("Characteristic curve"); // tccBox.setToolTipText("Test characteristic curve"); // personPanel.add(tccBox); // // personInfoBox.setText("Information function"); // personInfoBox.setToolTipText("Test information function"); // personPanel.add(personInfoBox); // // personSeBox.setText("Standard error"); // personSeBox.setToolTipText("Person standard error"); // personPanel.add(personSeBox); // // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 1; // gridBagConstraints.gridy = 1; // gridBagConstraints.fill = GridBagConstraints.BOTH; // gridBagConstraints.weightx = 1.0; // gridBagConstraints.insets = new Insets(0, 2, 5, 2); // getContentPane().add(personPanel, gridBagConstraints); // // typePanel.setBorder(BorderFactory.createTitledBorder("Curve Type")); // typePanel.setLayout(new GridLayout(2, 1)); // // typeGroup.add(probTypeButton); // probTypeButton.setSelected(true); // probTypeButton.setText("Category probability"); // probTypeButton.setToolTipText("Category probability curves"); // probTypeButton.setActionCommand("prob"); // typePanel.add(probTypeButton); // // typeGroup.add(expectedButton); // expectedButton.setText("Expected score"); // expectedButton.setToolTipText("Expected score curve"); // expectedButton.setActionCommand("expected"); // typePanel.add(expectedButton); // // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 0; // gridBagConstraints.gridy = 2; // gridBagConstraints.gridwidth = 1; // gridBagConstraints.fill = GridBagConstraints.BOTH; // gridBagConstraints.weightx = 1.0; // gridBagConstraints.insets = new Insets(0, 5, 5, 5); // getContentPane().add(typePanel, gridBagConstraints); // // xaxisPanel.setBorder(BorderFactory.createTitledBorder("X-axis")); // xaxisPanel.setLayout(new GridBagLayout()); // // xminLabel.setText("Min"); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 0; // gridBagConstraints.gridy = 0; // gridBagConstraints.insets = new Insets(0, 5, 5, 5); // xaxisPanel.add(xminLabel, gridBagConstraints); // xminLabel.getAccessibleContext().setAccessibleName("Min: "); // // xMinText.setText("-5.0"); // xMinText.setMinimumSize(new Dimension(50, 25)); // xMinText.setPreferredSize(new Dimension(50, 25)); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 1; // gridBagConstraints.gridy = 0; // gridBagConstraints.gridwidth = 3; // gridBagConstraints.insets = new Insets(0, 0, 5, 5); // xaxisPanel.add(xMinText, gridBagConstraints); // // xMaxLabel.setText("Max"); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 0; // gridBagConstraints.gridy = 1; // gridBagConstraints.insets = new Insets(0, 5, 5, 5); // xaxisPanel.add(xMaxLabel, gridBagConstraints); // // xMaxText.setText("5.0"); // xMaxText.setToolTipText("Maximum value"); // xMaxText.setMinimumSize(new Dimension(50, 25)); // xMaxText.setPreferredSize(new Dimension(50, 25)); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 1; // gridBagConstraints.gridy = 1; // gridBagConstraints.gridwidth = 3; // gridBagConstraints.insets = new Insets(0, 0, 5, 5); // xaxisPanel.add(xMaxText, gridBagConstraints); // // xPointsLabel.setText("Points"); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 0; // gridBagConstraints.gridy = 2; // gridBagConstraints.insets = new Insets(0, 5, 5, 5); // xaxisPanel.add(xPointsLabel, gridBagConstraints); // // pointsText.setText("31"); // pointsText.setToolTipText("Number of grid points"); // pointsText.setMinimumSize(new Dimension(50, 25)); // pointsText.setPreferredSize(new Dimension(50, 25)); // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 1; // gridBagConstraints.gridy = 2; // gridBagConstraints.gridwidth = 3; // gridBagConstraints.insets = new Insets(0, 0, 5, 5); // xaxisPanel.add(pointsText, gridBagConstraints); // // gridBagConstraints = new GridBagConstraints(); // gridBagConstraints.gridx = 1; // gridBagConstraints.gridy = 2; // gridBagConstraints.gridwidth = 1; // gridBagConstraints.fill = GridBagConstraints.BOTH; // gridBagConstraints.weightx = 1.0; // gridBagConstraints.insets = new Insets(0, 5, 5, 2); // getContentPane().add(xaxisPanel, gridBagConstraints); // // pack(); // }// </editor-fold> public boolean canRun(){ return canRun; } public IrtPlotCommand getCommand(){ return command; } public VariableChangeListener getVariableChangedListener(){ return vsp.getVariableChangedListener(); } public class RunActionListener implements ActionListener { public void actionPerformed(ActionEvent e){ try{ command = new IrtPlotCommand(); VariableAttributes[] vars = vsp.getSelectedVariables(); if(vsp.hasSelection()){ for(VariableAttributes v : vars){ command.getFreeOptionList("variables").addValue(v.getName().toString()); } command.getPairedOptionList("data").addValue("db", dbName.toString()); command.getPairedOptionList("data").addValue("table", table.toString()); command.getSelectAllOption("item").setSelected("icc", iccBox.isSelected()); command.getSelectAllOption("item").setSelected("info", itemInfoBox.isSelected()); command.getSelectAllOption("person").setSelected("tcc", tccBox.isSelected()); command.getSelectAllOption("person").setSelected("info", personInfoBox.isSelected()); command.getSelectAllOption("person").setSelected("se", personSeBox.isSelected()); command.getSelectOneOption("type").setSelected(typeGroup.getSelection().getActionCommand()); command.getSelectAllOption("options").setSelected("legend", legendBox.isSelected()); command.getPairedOptionList("xaxis").addValue("min", minTextField.getText().trim()); command.getPairedOptionList("xaxis").addValue("max", maxTextField.getText().trim()); command.getPairedOptionList("xaxis").addValue("points", pointsTextField.getText().trim()); //get output directory if(outputPath!=null && !"".equals(outputPath.trim())){ command.getFreeOption("output").add(outputPath.trim()); } if(hasResponseData){ command.getPairedOptionList("response").addValue("table", responseTableTextField.getText().trim()); command.getPairedOptionList("response").addValue("bins", observedPointsTextfield.getText().trim()); } canRun=true; setVisible(false); }else{ JOptionPane.showMessageDialog(IrtPlotDialog.this, "You must select variables for the plot", "VariableSelection Error", JOptionPane.ERROR_MESSAGE); } }catch(IllegalArgumentException ex){ logger.fatal(ex.getMessage(), ex); JOptionPane.showMessageDialog(IrtPlotDialog.this, ex.getMessage(), "Syntax Error", JOptionPane.ERROR_MESSAGE); } } }//end RunAction }