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 ItemGroupConfigurationPanel extends JPanel{ // Variables declaration - do not modify 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<VariableAttributes> itemList; private JScrollPane itemScrollPane; private JLabel modelLabel; private JPanel modelPanel; private JComboBox modelcomboBox; 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 (L4)", "3 Parameter Logistic Model (L3)", "2 Parameter Logistic Model (L2)", "Rasch Model (L1)", "Generalized Partial Credit Mode (PC1)", "Partial Credit Model (PC4)" }; //Order of entry must match those in itemResponseModelStringArray private final String[] itemResponseModelCodes = new String[] { "L4", "L3", "L2", "L1", "PC1", "PC4" }; private final String[] scalingText = {"Logistic (D = 1.0)", "Normal (D = 1.7)"}; private JDialog parent = null; 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; private ArrayList<VariableAttributes> selectedVariableMasterList = null; public ItemGroupConfigurationPanel(JDialog parent, VariableListModel variableListModel, ArrayList<VariableAttributes> selectedVariableMasterList){ this.parent = parent; this.variableListModel = variableListModel; this.selectedVariableMasterList = selectedVariableMasterList; initComponents(); selectedVariables = new ArrayList<VariableAttributes>(); } private void initComponents() { itemScrollPane = new JScrollPane(); itemList = new JList<VariableAttributes>(); 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(); setMaximumSize(new Dimension(760, 310)); setMinimumSize(new Dimension(760, 310)); setName(""); setPreferredSize(new Dimension(760, 310)); itemScrollPane.setBorder(BorderFactory.createTitledBorder("")); itemScrollPane.setMinimumSize(new Dimension(137, 281)); itemScrollPane.setPreferredSize(new Dimension(137, 281)); itemList.setModel(variableListModel); itemList.setCellRenderer(new SelectedItemListCellRenderer()); itemList.setLayoutOrientation(JList.VERTICAL); itemScrollPane.setViewportView(itemList); priorPanel.setBorder(BorderFactory.createTitledBorder("Priors")); priorPanel.setMinimumSize(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( parent, 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( parent, 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( parent, 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)); slippingPriorTextField.setEnabled(false); slippingPriorButton.setText("Choose"); slippingPriorButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { IrtItemPriorDialog priorDialog = new IrtItemPriorDialog( parent, slippingPriorTextField.getText().trim()); priorDialog.setVisible(true); slippingPriorTextField.setText(priorDialog.getPriorString()); slippingPriorTextField.setCaretPosition(0); } }); //Initialize values in text fields discriminationPriorTextField.setText("beta, 1.75, 3.0, 0.0, 3.0"); difficultyPriorTextField.setText("beta, 1.01, 1.01, -6.0, 6.0"); guessingPriorTextField.setText("beta, 3.5, 4.0, 0.0, 0.5"); slippingPriorTextField.setText(""); discriminationPriorTextField.setCaretPosition(0); difficultyPriorTextField.setCaretPosition(0); guessingPriorTextField.setCaretPosition(0); 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)); stepPriorTextField.setEnabled(false); stepPriorButton.setText("Choose"); stepPriorButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { IrtItemPriorDialog priorDialog = new IrtItemPriorDialog( parent, 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(290, 215)); startPanel.setPreferredSize(new Dimension(290, 215)); discriminationStartLabel.setText("Discrimination"); discriminationStartLabel.setToolTipText(""); discriminationStartTextField.setText(""); 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(""); 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(""); 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(""); slippingFixedCheckBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(slippingFixedCheckBox.isSelected()){ fixedSlipping = true; }else{ fixedSlipping = false; } } }); slippingStartTextField.setText(""); slippingStartTextField.setMaximumSize(new Dimension(100, 25)); slippingStartTextField.setMinimumSize(new Dimension(100, 25)); slippingStartTextField.setPreferredSize(new Dimension(100, 28)); slippingFixedCheckBox.setText("Fixed"); slippingFixedCheckBox.setToolTipText(""); stepStartLabel.setText("Step/Threshold"); stepStartLabel.setToolTipText(""); steStartTextField.setText(""); steStartTextField.setMaximumSize(new Dimension(100, 25)); steStartTextField.setMinimumSize(new Dimension(100, 25)); steStartTextField.setPreferredSize(new Dimension(100, 28)); steStartTextField.setEnabled(false); 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(38, 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(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); modelPanel.setBorder(BorderFactory.createTitledBorder("")); modelPanel.setPreferredSize(new Dimension(606, 60)); modelLabel.setText("Model"); modelcomboBox.setModel(new DefaultComboBoxModel(itemResponseModelStringArray)); modelcomboBox.setSelectedItem(itemResponseModelStringArray[1]); modelcomboBox.setMinimumSize(new Dimension(214, 28)); modelcomboBox.setPreferredSize(new Dimension(214, 28)); 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); steStartTextField.setEnabled(false); difficultyStartTextField.setEnabled(true); guessingStartTextField.setEnabled(true); slippingStartTextField.setEnabled(true); discriminationPriorTextField.setText("beta, 1.75, 3.0, 0.0, 3.0"); difficultyPriorTextField.setText("beta, 1.01, 1.01, -6.0, 6.0"); guessingPriorTextField.setText("beta, 3.5, 4.0, 0.0, 0.5"); slippingPriorTextField.setText("beta, 6.0, 3.0, 0.7, 1.0"); stepPriorTextField.setText(""); discriminationPriorTextField.setCaretPosition(0); difficultyPriorTextField.setCaretPosition(0); guessingPriorTextField.setCaretPosition(0); slippingPriorTextField.setCaretPosition(0); 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); steStartTextField.setEnabled(false); difficultyStartTextField.setEnabled(true); guessingStartTextField.setEnabled(true); slippingStartTextField.setEnabled(true); discriminationPriorTextField.setText("beta, 1.75, 3.0, 0.0, 3.0"); difficultyPriorTextField.setText("beta, 1.01, 1.01, -6.0, 6.0"); guessingPriorTextField.setText("beta, 3.5, 4.0, 0.0, 0.5"); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); discriminationPriorTextField.setCaretPosition(0); difficultyPriorTextField.setCaretPosition(0); guessingPriorTextField.setCaretPosition(0); slippingPriorTextField.setCaretPosition(0); 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); steStartTextField.setEnabled(false); difficultyStartTextField.setEnabled(true); guessingStartTextField.setEnabled(true); slippingStartTextField.setEnabled(true); discriminationPriorTextField.setText("beta, 1.75, 3.0, 0.0, 3.0"); difficultyPriorTextField.setText("beta, 1.01, 1.01, -6.0, 6.0"); guessingPriorTextField.setText(""); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); discriminationPriorTextField.setCaretPosition(0); difficultyPriorTextField.setCaretPosition(0); guessingPriorTextField.setCaretPosition(0); slippingPriorTextField.setCaretPosition(0); 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); steStartTextField.setEnabled(false); difficultyStartTextField.setEnabled(true); guessingStartTextField.setEnabled(true); slippingStartTextField.setEnabled(true); discriminationPriorTextField.setText(""); difficultyPriorTextField.setText("beta, 1.01, 1.01, -6.0, 6.0"); guessingPriorTextField.setText(""); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); discriminationPriorTextField.setCaretPosition(0); difficultyPriorTextField.setCaretPosition(0); guessingPriorTextField.setCaretPosition(0); slippingPriorTextField.setCaretPosition(0); 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); steStartTextField.setEnabled(true); difficultyStartTextField.setEnabled(false); guessingStartTextField.setEnabled(false); slippingStartTextField.setEnabled(false); difficultyPriorTextField.setText(""); discriminationPriorTextField.setText(""); guessingPriorTextField.setText(""); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); discriminationPriorButton.setEnabled(true); difficultyPriorButton.setEnabled(true); guessingPriorButton.setEnabled(false); slippingPriorButton.setEnabled(false); stepPriorButton.setEnabled(true); }else if(itemResponseModelStringArray[5].equals(selectedItem)){ discriminationPriorTextField.setEnabled(false); difficultyPriorTextField.setEnabled(true); guessingPriorTextField.setEnabled(false); slippingPriorTextField.setEnabled(false); stepPriorTextField.setEnabled(true); steStartTextField.setEnabled(true); difficultyStartTextField.setEnabled(false); guessingStartTextField.setEnabled(false); slippingStartTextField.setEnabled(false); difficultyPriorTextField.setText(""); discriminationPriorTextField.setText(""); guessingPriorTextField.setText(""); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); discriminationPriorButton.setEnabled(false); difficultyPriorButton.setEnabled(false); guessingPriorButton.setEnabled(false); slippingPriorButton.setEnabled(false); stepPriorButton.setEnabled(true); } } }); scalingLabel.setText("Scaling constant"); scaleComboBox.setModel(new DefaultComboBoxModel(scalingText)); scaleComboBox.setSelectedItem(scalingText); 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(scalingText[0].equals(selectedItem)){ scalingConstant = 1.0; }else{ scalingConstant = 1.7; } } }); 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)) ); GroupLayout layout = new GroupLayout(this); this.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() .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, 596, Short.MAX_VALUE)) .addContainerGap(36, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(itemScrollPane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(modelPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) .addComponent(priorPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(startPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addContainerGap(18, Short.MAX_VALUE)) ); }// </editor-fold> public boolean hasSameNumberOfCategories(){ int[] selectedIndices = itemList.getSelectedIndices(); VariableAttributes v = null; for(int i=0;i<selectedIndices.length;i++){ v = variableListModel.getElementAt(selectedIndices[i]); if(i==0){ ncat = v.getItemScoring().numberOfScoreLevels(); }else{ if(ncat!=v.getItemScoring().numberOfScoreLevels()){ JOptionPane.showMessageDialog(parent, "Different item scores found. All items \n" + "in the group must have the same scoring.", "Item Selection Error", JOptionPane.ERROR_MESSAGE); return false; } } } return true; } public ArrayList<VariableAttributes> getSelectedVariables(){ return selectedVariables; } public void resetPanel(){ for(VariableAttributes v : selectedVariables){ if(selectedVariableMasterList.contains(v)) selectedVariableMasterList.remove(v); } itemList.clearSelection(); selectedVariables.clear(); modelcomboBox.setSelectedItem(itemResponseModelStringArray[1]); scaleComboBox.setSelectedItem(scalingText[0]); discriminationPriorTextField.setText(""); difficultyPriorTextField.setText(""); guessingPriorTextField.setText(""); slippingPriorTextField.setText(""); stepPriorTextField.setText(""); slippingPriorTextField.setEnabled(false); stepPriorTextField.setEnabled(false); discriminationStartTextField.setText(""); difficultyStartTextField.setText(""); guessingStartTextField.setText(""); slippingStartTextField.setText(""); steStartTextField.setText(""); steStartTextField.setEnabled(false); discriminationFixedCheckBox.setSelected(false); difficultyFixedCheckBox.setSelected(false); guessingFixedCheckBox.setSelected(false); slippingFixedCheckBox.setSelected(false); steFixedCheckBox.setSelected(false); } public JList getItemList(){ return itemList; } // public void setSelectedVariables(){ // int[] selectedIndices = itemList.getSelectedIndices(); // VariableInfo v = null; // for(int i = 0; i<selectedIndices.length;i++){ // v = variableListModel.getElementAt(selectedIndices[i]); // selectedVariables.add(v); // // if(!selectedVariableMasterList.contains(v)){ // selectedVariableMasterList.add(v); // } // // } // } public boolean setOption(MegaOption option){ //Get selected items int[] selectedIndices = itemList.getSelectedIndices(); if(selectedIndices.length==0) return false;//No items selected therefore no option to set //Set selected items (required) VariableAttributes v = null; for(int i = 0; i<selectedIndices.length;i++){ v = variableListModel.getElementAt(selectedIndices[i]); if(i==0) ncat = v.getItemScoring().numberOfScoreLevels();//number of categories set by first item in group selectedVariables.add(v); option.addValueAt("variables", v.getName().toString()); } //Set model name (required) int selectedItem = modelcomboBox.getSelectedIndex(); String model = itemResponseModelCodes[selectedItem]; option.addValueAt("model", model); //Scaling constant (required) option.addValueAt("scale", Double.valueOf(scalingConstant).toString()); //Number of score levels (required) option.addValueAt("ncat", Integer.valueOf(ncat).toString()); //Set priors String[] prior = null; String aprior = discriminationPriorTextField.getText().trim(); if(!"".equals(aprior)){ prior = aprior.split(","); for(int i=0;i<prior.length;i++){ option.addValueAt("aprior", prior[i]); } } String bprior = difficultyPriorTextField.getText().trim(); if(!"".equals(bprior)){ prior = bprior.split(","); for(int i=0;i<prior.length;i++){ option.addValueAt("bprior", prior[i]); } } String cprior = guessingPriorTextField.getText().trim(); if(!"".equals(cprior)){ prior = cprior.split(","); for(int i=0;i<prior.length;i++){ option.addValueAt("cprior", prior[i]); } } String uprior = slippingPriorTextField.getText().trim(); if(!"".equals(uprior)){ prior = uprior.split(","); for(int i=0;i<prior.length;i++){ option.addValueAt("uprior", prior[i]); } } String stprior = stepPriorTextField.getText().trim(); if(!"".equals(stprior)){ prior = stprior.split(","); for(int i=0;i<prior.length;i++){ option.addValueAt("stprior", prior[i]); } } //Set fixed values if(fixedDiscrimination) option.addValueAt("fixed", "aparam"); if(fixedDifficulty) option.addValueAt("fixed", "bparam"); if(fixedGuessing) option.addValueAt("fixed", "cparam"); if(fixedSlipping) option.addValueAt("fixed", "uparam");; if(fixedStep) option.addValueAt("fixed", "stparam"); //Start values if(!("".equals(discriminationStartTextField.getText().trim()) && "".equals(difficultyStartTextField.getText().trim()) && "".equals(guessingStartTextField.getText().trim()) && "".equals(slippingStartTextField.getText().trim()) && "".equals(steStartTextField.getText().trim())) ){ //Set discrimination start value for all models that can use it (4PL, 3PL, 2PL, 1PL, GPCM) if(itemResponseModelCodes[0].equals(model) || itemResponseModelCodes[1].equals(model) || itemResponseModelCodes[2].equals(model) || itemResponseModelCodes[3].equals(model) || itemResponseModelCodes[4].equals(model)){ String astart = discriminationStartTextField.getText().trim(); if("".equals(astart)) astart = "1.0"; option.addValueAt("start", astart); } //Set difficulty, guessing, and slipping start values for all models that can use them (4PL, 3PL, 2PL, 1PL) if(itemResponseModelCodes[0].equals(model) || itemResponseModelCodes[1].equals(model) || itemResponseModelCodes[2].equals(model) || itemResponseModelCodes[3].equals(model)){ String bstart = difficultyStartTextField.getText().trim(); if("".equals(bstart)) bstart = "0.0"; option.addValueAt("start", bstart); String cstart = guessingStartTextField.getText().trim(); if("".equals(cstart)) cstart = "0.0"; option.addValueAt("start", cstart); String ustart = slippingStartTextField.getText().trim(); if("".equals(ustart)) ustart = "1.0"; option.addValueAt("start", ustart); } //Set step parameter start values for GPCM and PCM if(itemResponseModelCodes[4].equals(model) || itemResponseModelCodes[5].equals(model)) { String ststart = steStartTextField.getText().trim(); String[] st = null; if ("".equals(ststart)) { st = new String[ncat]; for (int k = 0; k < ncat; k++) { st[k] = "0.0"; } } else { st = ststart.split(","); } for (int k = 0; k < ncat; k++) { option.addValueAt("start", st[k]); } } }//End start values return true; } class SelectedItemListCellRenderer extends DefaultListCellRenderer{ public SelectedItemListCellRenderer(){ } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){ Font labelFont = UIManager.getFont("Label.font"); JLabel label = (JLabel)super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); VariableAttributes v = (VariableAttributes)value; if(selectedVariableMasterList.contains(v)){ label.setFont(labelFont.deriveFont(Font.BOLD)) ; }else{ label.setFont(labelFont.deriveFont(Font.PLAIN)); } return this; } } }