package com.itemanalysis.jmetrik.stats.irt.estimation;
import com.itemanalysis.jmetrik.commandbuilder.MegaOption;
import com.itemanalysis.jmetrik.model.VariableListModel;
import com.itemanalysis.psychometrics.data.VariableAttributes;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class IrtItemConfigurationDialog extends JDialog {
// Variables declaration - do not modify
private JButton cancelButton;
private JCheckBox difficultyFixedCheckBox;
private JButton difficultyPriorButton;
private JLabel difficultyPriorLabel;
private JTextField difficultyPriorTextField;
private JLabel difficultyStartLabel;
private JTextField difficultyStartTextField;
private JCheckBox discriminationFixedCheckBox;
private JButton discriminationPriorButton;
private JLabel discriminationPriorLabel;
private JTextField discriminationPriorTextField;
private JLabel discriminationStartLabel;
private JTextField discriminationStartTextField;
private JCheckBox guessingFixedCheckBox;
private JButton guessingPriorButton;
private JLabel guessingPriorLabel;
private JTextField guessingPriorTextField;
private JLabel guessingStartLabel;
private JTextField guessingStartTextField;
private JList itemList;
private JScrollPane itemScrollPane;
private JLabel modelLabel;
private JPanel modelPanel;
private JComboBox modelcomboBox;
private JButton okButton;
private JPanel priorPanel;
private JComboBox scaleComboBox;
private JLabel scalingLabel;
private JCheckBox slippingFixedCheckBox;
private JButton slippingPriorButton;
private JLabel slippingPriorLabel;
private JTextField slippingPriorTextField;
private JLabel slippingStartLabel;
private JTextField slippingStartTextField;
private JPanel startPanel;
private JCheckBox steFixedCheckBox;
private JTextField steStartTextField;
private JButton stepPriorButton;
private JLabel stepPriorLabel;
private JTextField stepPriorTextField;
private JLabel stepStartLabel;
// End of variables declaration
//Order of entries must match those in itemResponseModelCodes
private final String[] itemResponseModelStringArray = new String[] {
"4 Parameter Logistic Model (PL4)",
"3 Parameter Logistic Model (PL3)",
"2 Parameter Logistic Model (PL2)",
"Rasch Model",
"Generalized Partial Credit Mode (GPCM)",
"Partial Credit Model (PCM2)"
};
//Order of entry must match those in itemResponseModelStringArray
private final String[] itemResponseModelCodes = new String[] {
"PL4",
"PL3",
"PL2",
"PL1",
"GPCM",
"PCM2"
};
private VariableListModel variableListModel = null;
private ArrayList<VariableAttributes> selectedVariables = null;
private int ncat = 0;
private double scalingConstant = 1.0;
private boolean fixedDiscrimination = false;
private boolean fixedDifficulty = false;
private boolean fixedGuessing = false;
private boolean fixedSlipping = false;
private boolean fixedStep = false;
public IrtItemConfigurationDialog(JDialog parent, VariableListModel variableListModel){
super(parent, "IRT Item Configuration", true);
this.variableListModel = variableListModel;
initComponents();
setResizable(false);
setLocationRelativeTo(parent);
}
private void initComponents() {
priorPanel = new JPanel();
discriminationPriorTextField = new JTextField();
discriminationPriorLabel = new JLabel();
discriminationPriorButton = new JButton();
difficultyPriorLabel = new JLabel();
difficultyPriorTextField = new JTextField();
difficultyPriorButton = new JButton();
guessingPriorLabel = new JLabel();
guessingPriorTextField = new JTextField();
guessingPriorButton = new JButton();
slippingPriorLabel = new JLabel();
slippingPriorTextField = new JTextField();
slippingPriorButton = new JButton();
stepPriorLabel = new JLabel();
stepPriorTextField = new JTextField();
stepPriorButton = new JButton();
startPanel = new JPanel();
discriminationStartLabel = new JLabel();
discriminationStartTextField = new JTextField();
discriminationFixedCheckBox = new JCheckBox();
difficultyStartLabel = new JLabel();
difficultyStartTextField = new JTextField();
difficultyFixedCheckBox = new JCheckBox();
guessingStartLabel = new JLabel();
guessingStartTextField = new JTextField();
guessingFixedCheckBox = new JCheckBox();
slippingStartLabel = new JLabel();
slippingStartTextField = new JTextField();
slippingFixedCheckBox = new JCheckBox();
stepStartLabel = new JLabel();
steStartTextField = new JTextField();
steFixedCheckBox = new JCheckBox();
modelPanel = new JPanel();
modelLabel = new JLabel();
modelcomboBox = new JComboBox();
scalingLabel = new JLabel();
scaleComboBox = new JComboBox();
okButton = new JButton();
cancelButton = new JButton();
itemScrollPane = new JScrollPane();
itemList = new JList();
//Set certain text fields and buttons enabled according to the default of using a 3PL model.
//Enabled text fields and buttons will change according to selection in modelcomboBox.
discriminationPriorTextField.setEnabled(true);
difficultyPriorTextField.setEnabled(true);
guessingPriorTextField.setEnabled(true);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(false);
discriminationPriorButton.setEnabled(true);
difficultyPriorButton.setEnabled(true);
guessingPriorButton.setEnabled(true);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(false);
//End setting enabled
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Item Configuration");
setMaximumSize(new Dimension(770, 360));
setMinimumSize(new Dimension(770, 360));
setPreferredSize(new Dimension(770, 360));
setResizable(false);
priorPanel.setBorder(BorderFactory.createTitledBorder("Priors"));
priorPanel.setMinimumSize(new Dimension(300, 215));
priorPanel.setPreferredSize(new Dimension(300, 215));
discriminationPriorTextField.setMaximumSize(new Dimension(100, 25));
discriminationPriorTextField.setMinimumSize(new Dimension(100, 25));
discriminationPriorTextField.setPreferredSize(new Dimension(100, 28));
discriminationPriorLabel.setText("Discrimination");
discriminationPriorButton.setText("Choose");
discriminationPriorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
IrtItemPriorDialog priorDialog = new IrtItemPriorDialog(
IrtItemConfigurationDialog.this,
discriminationPriorTextField.getText().trim());
priorDialog.setVisible(true);
discriminationPriorTextField.setText(priorDialog.getPriorString());
discriminationPriorTextField.setCaretPosition(0);
}
});
difficultyPriorLabel.setText("Difficulty");
difficultyPriorTextField.setMaximumSize(new Dimension(100, 25));
difficultyPriorTextField.setMinimumSize(new Dimension(100, 25));
difficultyPriorTextField.setPreferredSize(new Dimension(100, 28));
difficultyPriorButton.setText("Choose");
difficultyPriorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
IrtItemPriorDialog priorDialog = new IrtItemPriorDialog(
IrtItemConfigurationDialog.this,
difficultyPriorTextField.getText().trim());
priorDialog.setVisible(true);
difficultyPriorTextField.setText(priorDialog.getPriorString());
difficultyPriorTextField.setCaretPosition(0);
}
});
guessingPriorLabel.setText("Guessing");
guessingPriorTextField.setMaximumSize(new Dimension(100, 25));
guessingPriorTextField.setMinimumSize(new Dimension(100, 25));
guessingPriorTextField.setPreferredSize(new Dimension(100, 28));
guessingPriorButton.setText("Choose");
guessingPriorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
IrtItemPriorDialog priorDialog = new IrtItemPriorDialog(
IrtItemConfigurationDialog.this,
guessingPriorTextField.getText().trim());
priorDialog.setVisible(true);
guessingPriorTextField.setText(priorDialog.getPriorString());
guessingPriorTextField.setCaretPosition(0);
}
});
slippingPriorLabel.setText("Slipping");
slippingPriorTextField.setMaximumSize(new Dimension(100, 25));
slippingPriorTextField.setMinimumSize(new Dimension(100, 25));
slippingPriorTextField.setPreferredSize(new Dimension(100, 28));
slippingPriorButton.setText("Choose");
slippingPriorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
IrtItemPriorDialog priorDialog = new IrtItemPriorDialog(
IrtItemConfigurationDialog.this,
slippingPriorTextField.getText().trim());
priorDialog.setVisible(true);
slippingPriorTextField.setText(priorDialog.getPriorString());
slippingPriorTextField.setCaretPosition(0);
}
});
stepPriorLabel.setText("Step/Threshold");
stepPriorTextField.setMaximumSize(new Dimension(100, 25));
stepPriorTextField.setMinimumSize(new Dimension(100, 25));
stepPriorTextField.setPreferredSize(new Dimension(100, 28));
stepPriorButton.setText("Choose");
stepPriorButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
IrtItemPriorDialog priorDialog = new IrtItemPriorDialog(
IrtItemConfigurationDialog.this,
stepPriorTextField.getText().trim());
priorDialog.setVisible(true);
stepPriorTextField.setText(priorDialog.getPriorString());
stepPriorTextField.setCaretPosition(0);
}
});
GroupLayout priorPanelLayout = new GroupLayout(priorPanel);
priorPanel.setLayout(priorPanelLayout);
priorPanelLayout.setHorizontalGroup(
priorPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(priorPanelLayout.createSequentialGroup()
.addContainerGap(26, Short.MAX_VALUE)
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(GroupLayout.Alignment.TRAILING, priorPanelLayout.createSequentialGroup()
.addComponent(discriminationPriorLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(discriminationPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(discriminationPriorButton))
.addGroup(GroupLayout.Alignment.TRAILING, priorPanelLayout.createSequentialGroup()
.addComponent(difficultyPriorLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(difficultyPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(difficultyPriorButton))
.addGroup(GroupLayout.Alignment.TRAILING, priorPanelLayout.createSequentialGroup()
.addComponent(guessingPriorLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(guessingPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(guessingPriorButton))
.addGroup(GroupLayout.Alignment.TRAILING, priorPanelLayout.createSequentialGroup()
.addComponent(slippingPriorLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(slippingPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(slippingPriorButton))
.addGroup(GroupLayout.Alignment.TRAILING, priorPanelLayout.createSequentialGroup()
.addComponent(stepPriorLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(stepPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(stepPriorButton)))
.addContainerGap())
);
priorPanelLayout.setVerticalGroup(
priorPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(priorPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(discriminationPriorLabel)
.addComponent(discriminationPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(discriminationPriorButton))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(difficultyPriorLabel)
.addComponent(difficultyPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(difficultyPriorButton))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(guessingPriorLabel)
.addComponent(guessingPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(guessingPriorButton))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(slippingPriorLabel)
.addComponent(slippingPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(slippingPriorButton))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(priorPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(stepPriorLabel)
.addComponent(stepPriorTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(stepPriorButton))
.addContainerGap(17, Short.MAX_VALUE))
);
startPanel.setBorder(BorderFactory.createTitledBorder("Start Values"));
startPanel.setMinimumSize(new Dimension(295, 215));
startPanel.setPreferredSize(new Dimension(295, 215));
discriminationStartLabel.setText("Discrimination");
discriminationStartLabel.setToolTipText("");
discriminationStartTextField.setText("1.0");
discriminationStartTextField.setMaximumSize(new Dimension(100, 25));
discriminationStartTextField.setMinimumSize(new Dimension(100, 25));
discriminationStartTextField.setPreferredSize(new Dimension(100, 28));
discriminationFixedCheckBox.setText("Fixed");
discriminationFixedCheckBox.setToolTipText("");
discriminationFixedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(discriminationFixedCheckBox.isSelected()){
fixedDiscrimination = true;
}else{
fixedDiscrimination = false;
}
}
});
difficultyStartLabel.setText("Difficulty");
difficultyStartLabel.setToolTipText("");
difficultyStartTextField.setText("0.0");
difficultyStartTextField.setMaximumSize(new Dimension(100, 25));
difficultyStartTextField.setMinimumSize(new Dimension(100, 25));
difficultyStartTextField.setPreferredSize(new Dimension(100, 28));
difficultyFixedCheckBox.setText("Fixed");
difficultyFixedCheckBox.setToolTipText("");
difficultyFixedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(difficultyFixedCheckBox.isSelected()){
fixedDifficulty = true;
}else{
fixedDifficulty = false;
}
}
});
guessingStartLabel.setText("Guessing");
guessingStartLabel.setToolTipText("");
guessingStartTextField.setText("0.0");
guessingStartTextField.setMaximumSize(new Dimension(100, 25));
guessingStartTextField.setMinimumSize(new Dimension(100, 25));
guessingStartTextField.setPreferredSize(new Dimension(100, 28));
guessingFixedCheckBox.setText("Fixed");
guessingFixedCheckBox.setToolTipText("");
guessingFixedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(guessingFixedCheckBox.isSelected()){
fixedGuessing = true;
}else{
fixedGuessing = false;
}
}
});
slippingStartLabel.setText("Slipping");
slippingStartLabel.setToolTipText("");
slippingStartTextField.setText("0.95");
slippingStartTextField.setMaximumSize(new Dimension(100, 25));
slippingStartTextField.setMinimumSize(new Dimension(100, 25));
slippingStartTextField.setPreferredSize(new Dimension(100, 28));
slippingFixedCheckBox.setText("Fixed");
slippingFixedCheckBox.setToolTipText("");
slippingFixedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(slippingFixedCheckBox.isSelected()){
fixedSlipping = true;
}else{
fixedSlipping = false;
}
}
});
stepStartLabel.setText("Step/Threshold");
stepStartLabel.setToolTipText("");
steStartTextField.setText("0.0");
steStartTextField.setMaximumSize(new Dimension(100, 25));
steStartTextField.setMinimumSize(new Dimension(100, 25));
steStartTextField.setPreferredSize(new Dimension(100, 28));
steFixedCheckBox.setText("Fixed");
steFixedCheckBox.setToolTipText("");
steFixedCheckBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(steFixedCheckBox.isSelected()){
fixedStep = true;
}else{
fixedStep = false;
}
}
});
GroupLayout startPanelLayout = new GroupLayout(startPanel);
startPanel.setLayout(startPanelLayout);
startPanelLayout.setHorizontalGroup(
startPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(startPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(startPanelLayout.createSequentialGroup()
.addComponent(discriminationStartLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(discriminationStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(discriminationFixedCheckBox))
.addGroup(startPanelLayout.createSequentialGroup()
.addComponent(difficultyStartLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(difficultyStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(difficultyFixedCheckBox))
.addGroup(startPanelLayout.createSequentialGroup()
.addComponent(slippingStartLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(slippingStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(slippingFixedCheckBox))
.addGroup(startPanelLayout.createSequentialGroup()
.addComponent(guessingStartLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(guessingStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(guessingFixedCheckBox))
.addGroup(startPanelLayout.createSequentialGroup()
.addComponent(stepStartLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(steStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(steFixedCheckBox)))
.addContainerGap(43, Short.MAX_VALUE))
);
startPanelLayout.setVerticalGroup(
startPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(startPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(discriminationStartLabel)
.addComponent(discriminationStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(discriminationFixedCheckBox))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(difficultyStartLabel)
.addComponent(difficultyStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(difficultyFixedCheckBox))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(guessingStartLabel)
.addComponent(guessingStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(guessingFixedCheckBox))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(slippingStartLabel)
.addComponent(slippingStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(slippingFixedCheckBox))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(startPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(stepStartLabel)
.addComponent(steStartTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(steFixedCheckBox))
.addContainerGap(17, Short.MAX_VALUE))
);
modelPanel.setBorder(BorderFactory.createTitledBorder(""));
modelPanel.setPreferredSize(new Dimension(606, 60));
modelLabel.setText("Model");
modelcomboBox.setModel(new DefaultComboBoxModel(itemResponseModelStringArray));
modelcomboBox.setMinimumSize(new Dimension(214, 28));
modelcomboBox.setPreferredSize(new Dimension(214, 28));
modelcomboBox.setSelectedItem(itemResponseModelStringArray[1]);
modelcomboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
String selectedItem = (String)comboBox.getSelectedItem();
if(itemResponseModelStringArray[0].equals(selectedItem)){
discriminationPriorTextField.setEnabled(true);
difficultyPriorTextField.setEnabled(true);
guessingPriorTextField.setEnabled(true);
slippingPriorTextField.setEnabled(true);
stepPriorTextField.setEnabled(false);
discriminationPriorButton.setEnabled(true);
difficultyPriorButton.setEnabled(true);
guessingPriorButton.setEnabled(true);
slippingPriorButton.setEnabled(true);
stepPriorButton.setEnabled(false);
}else if(itemResponseModelStringArray[1].equals(selectedItem)){
discriminationPriorTextField.setEnabled(true);
difficultyPriorTextField.setEnabled(true);
guessingPriorTextField.setEnabled(true);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(false);
discriminationPriorButton.setEnabled(true);
difficultyPriorButton.setEnabled(true);
guessingPriorButton.setEnabled(true);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(false);
}else if(itemResponseModelStringArray[2].equals(selectedItem)){
discriminationPriorTextField.setEnabled(true);
difficultyPriorTextField.setEnabled(true);
guessingPriorTextField.setEnabled(false);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(false);
discriminationPriorButton.setEnabled(true);
difficultyPriorButton.setEnabled(true);
guessingPriorButton.setEnabled(false);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(false);
}else if(itemResponseModelStringArray[3].equals(selectedItem)){
discriminationPriorTextField.setEnabled(false);
difficultyPriorTextField.setEnabled(true);
guessingPriorTextField.setEnabled(false);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(false);
discriminationPriorButton.setEnabled(false);
difficultyPriorButton.setEnabled(true);
guessingPriorButton.setEnabled(false);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(false);
}else if(itemResponseModelStringArray[4].equals(selectedItem)){
discriminationPriorTextField.setEnabled(true);
difficultyPriorTextField.setEnabled(false);
guessingPriorTextField.setEnabled(false);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(true);
discriminationPriorButton.setEnabled(true);
difficultyPriorButton.setEnabled(false);
guessingPriorButton.setEnabled(false);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(true);
}else if(itemResponseModelStringArray[5].equals(selectedItem)){
discriminationPriorTextField.setEnabled(false);
difficultyPriorTextField.setEnabled(false);
guessingPriorTextField.setEnabled(false);
slippingPriorTextField.setEnabled(false);
stepPriorTextField.setEnabled(true);
discriminationPriorButton.setEnabled(false);
difficultyPriorButton.setEnabled(false);
guessingPriorButton.setEnabled(false);
slippingPriorButton.setEnabled(false);
stepPriorButton.setEnabled(true);
}
}
});
scalingLabel.setText("Scaling constant");
scaleComboBox.setModel(new DefaultComboBoxModel(new String[] { "Logistic (D = 1.0)", "Normal (D = 1.7)" }));
scaleComboBox.setMinimumSize(new Dimension(150, 28));
scaleComboBox.setPreferredSize(new Dimension(150, 28));
scaleComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
String selectedItem = (String)comboBox.getSelectedItem();
if("Normal (D = 1.7)".equals(selectedItem)){
scalingConstant = 1.7;
}else{
scalingConstant = 1.0;
}
}
});
GroupLayout modelPanelLayout = new GroupLayout(modelPanel);
modelPanel.setLayout(modelPanelLayout);
modelPanelLayout.setHorizontalGroup(
modelPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(modelPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(modelLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(modelcomboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(16, 16, 16)
.addComponent(scalingLabel)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scaleComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
modelPanelLayout.setVerticalGroup(
modelPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(modelPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(modelPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(modelLabel)
.addComponent(modelcomboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(scalingLabel)
.addComponent(scaleComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addContainerGap(16, Short.MAX_VALUE))
);
okButton.setText("OK");
okButton.setMaximumSize(new Dimension(75, 28));
okButton.setMinimumSize(new Dimension(75, 28));
okButton.setPreferredSize(new Dimension(75, 28));
cancelButton.setText("Cancel");
cancelButton.setMaximumSize(new Dimension(75, 28));
cancelButton.setMinimumSize(new Dimension(75, 28));
cancelButton.setPreferredSize(new Dimension(75, 28));
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
itemScrollPane.setBorder(BorderFactory.createTitledBorder(""));
itemScrollPane.setMinimumSize(new Dimension(137, 281));
itemScrollPane.setPreferredSize(new Dimension(137, 281));
itemList.setModel(variableListModel);
itemList.setLayoutOrientation(JList.VERTICAL);
itemScrollPane.setViewportView(itemList);
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(itemScrollPane, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(okButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addComponent(priorPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(startPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addComponent(modelPanel, GroupLayout.DEFAULT_SIZE, 601, Short.MAX_VALUE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(modelPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(startPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(priorPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
.addComponent(itemScrollPane, GroupLayout.PREFERRED_SIZE, 281, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(okButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(cancelButton, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}
public boolean checkForSameNumberOfCategories(){
int[] selectedIndices = itemList.getSelectedIndices();
VariableAttributes v = null;
double maxItemScore = 0;
double previousMaxItemScore = 0;
for(int i : selectedIndices){
v = variableListModel.getElementAt(i);
if(i==0){
ncat = v.getItemScoring().numberOfScoreLevels();
}else{
if(ncat!=v.getItemScoring().numberOfScoreLevels()){
JOptionPane.showMessageDialog(IrtItemConfigurationDialog.this,
"Selected items must have the same scoring.",
"Item Selection Error",
JOptionPane.ERROR_MESSAGE);
return false;
}
}
}
return true;
}
public ArrayList<VariableAttributes> getSelectedVariables(){
return selectedVariables;
}
public class OkActionListener implements ActionListener{
public void actionPerformed(ActionEvent evt){
IrtItemCalibrationCommand command = new IrtItemCalibrationCommand();
MegaOption option = command.getOption("group");
selectedVariables = new ArrayList<VariableAttributes>();
//Process selected items
int[] selectedIndices = itemList.getSelectedIndices();
String variableString = "(";
VariableAttributes v = null;
for(int i = 0; i<selectedIndices.length;i++){
v = variableListModel.getElementAt(i);
selectedVariables.add(v);
variableString += v.getName().toString();
if(i<selectedIndices.length-1) variableString += ", ";
}
variableString += ")";
//Set selected items (required)
option.addValueAt("variables", variableString);
//Set model name (required)
int selectedItem = modelcomboBox.getSelectedIndex();
String model = itemResponseModelCodes[selectedItem];
option.addValueAt("model", model);
//Number of score levels (required)
option.addValueAt("ncat", Integer.valueOf(ncat).toString());
//Scaling constant (required)
option.addValueAt("scale", Double.valueOf(scalingConstant).toString());
//Set priors
String aprior = discriminationPriorTextField.getText().trim();
if(!"".equals(aprior)) option.addValueAt("aprior", "("+aprior+")");
String bprior = difficultyPriorTextField.getText().trim();
if(!"".equals(bprior)) option.addValueAt("bprior", "("+bprior+")");
String cprior = guessingPriorTextField.getText().trim();
if(!"".equals(cprior)) option.addValueAt("cprior", "("+cprior+")");
String uprior = slippingPriorTextField.getText().trim();
if(!"".equals(uprior)) option.addValueAt("uprior", "("+uprior+")");
String stprior = stepPriorTextField.getText().trim();
if(!"".equals(stprior)) option.addValueAt("stprior", "("+stprior+")");
//Set fixed values
String fixedOptions = "(";
int count = 0;
ArrayList<String> fixedString = new ArrayList<String>(5);
if(fixedDiscrimination) fixedString.add("aparam");
if(fixedDifficulty) fixedString.add("bparam");
if(fixedGuessing) fixedString.add("cparam");
if(fixedSlipping) fixedString.add("uparam");
if(fixedStep) fixedString.add("stparam");
for(int i=0;i<fixedString.size();i++){
fixedOptions += fixedString.get(i);
if(i<fixedString.size()-1) fixedOptions += ", ";
}
fixedOptions += ")";
//Start values
//TODO stopped here
//TODO will need to know the group number
}
}
}