[1] | 1 | package genius.gui.uncertainty;
|
---|
| 2 |
|
---|
[65] | 3 | import java.util.Hashtable;
|
---|
| 4 |
|
---|
[1] | 5 | import java.awt.Dimension;
|
---|
[69] | 6 | import java.awt.GridBagConstraints;
|
---|
| 7 | import java.awt.GridBagLayout;
|
---|
| 8 | import java.awt.Insets;
|
---|
| 9 | import java.awt.event.KeyAdapter;
|
---|
| 10 | import java.awt.event.KeyEvent;
|
---|
[1] | 11 |
|
---|
[44] | 12 | import javax.swing.JFrame;
|
---|
[1] | 13 | import javax.swing.JLabel;
|
---|
| 14 | import javax.swing.JPanel;
|
---|
| 15 | import javax.swing.JSlider;
|
---|
[69] | 16 | import javax.swing.JTextField;
|
---|
[1] | 17 | import javax.swing.event.ChangeEvent;
|
---|
| 18 | import javax.swing.event.ChangeListener;
|
---|
| 19 |
|
---|
| 20 | import genius.gui.panels.ButtonPanel;
|
---|
| 21 | import genius.gui.panels.ExtendedCheckboxPanel;
|
---|
| 22 |
|
---|
[66] | 23 | public class PairwiseComparisonPanel extends JPanel
|
---|
| 24 | {
|
---|
[1] | 25 | private static final long serialVersionUID = 7745677414933157895L;
|
---|
| 26 |
|
---|
| 27 | private PairwiseComparisonModel model;
|
---|
| 28 |
|
---|
| 29 | private final JLabel label;
|
---|
| 30 | private final JLabel numberOfCompsLabel;
|
---|
[69] | 31 | private final JLabel rankingsLabel;
|
---|
[30] | 32 |
|
---|
[69] | 33 | private JPanel uncertaintyLevelPanel;
|
---|
[66] | 34 | private SteppingSlider uncertaintySlider;
|
---|
| 35 |
|
---|
[69] | 36 | final JTextField text = new JTextField(4);
|
---|
| 37 |
|
---|
[1] | 38 | private JSlider errorSlider;
|
---|
[69] | 39 | private JLabel errorLabel;
|
---|
[1] | 40 |
|
---|
| 41 | private ExtendedCheckboxPanel experimentalBox;
|
---|
| 42 | private final ButtonPanel okButton;
|
---|
| 43 |
|
---|
| 44 |
|
---|
[66] | 45 | public PairwiseComparisonPanel(PairwiseComparisonModel model)
|
---|
| 46 | {
|
---|
[65] | 47 | JFrame frame = new JFrame("Uncertainty options");
|
---|
[1] | 48 | this.model = model;
|
---|
[30] | 49 |
|
---|
[65] | 50 | this.label = new JLabel("Set user model parameters");
|
---|
[66] | 51 | this.numberOfCompsLabel = new JLabel("(Maximum number of rankings = " + this.model.getMaxNumberInComps() +")");
|
---|
[1] | 52 |
|
---|
[69] | 53 | this.uncertaintyLevelPanel = new JPanel(new GridBagLayout());
|
---|
| 54 |
|
---|
| 55 | GridBagConstraints c = new GridBagConstraints();
|
---|
| 56 | c.insets = new Insets(10,10,10,10);
|
---|
| 57 |
|
---|
| 58 |
|
---|
[1] | 59 | this.uncertaintySlider = createUncertaintySlider();
|
---|
[69] | 60 | this.rankingsLabel = new JLabel("Amount of rankings");
|
---|
[1] | 61 |
|
---|
[69] | 62 | uncertaintySlider.addChangeListener(new ChangeListener(){
|
---|
| 63 | @Override
|
---|
| 64 | public void stateChanged(ChangeEvent e)
|
---|
| 65 | {
|
---|
| 66 |
|
---|
| 67 | // Don't set the text field if that was the one triggering this event
|
---|
| 68 | if (uncertaintySlider.isFocusOwner())
|
---|
| 69 | text.setText(String.valueOf(uncertaintySlider.getDomainValue()));
|
---|
| 70 |
|
---|
| 71 | model.setNumberOfComparisons(uncertaintySlider.getDomainValue());
|
---|
| 72 | }
|
---|
| 73 | });
|
---|
| 74 |
|
---|
| 75 | text.addKeyListener(new KeyAdapter(){
|
---|
| 76 | @Override
|
---|
| 77 | public void keyReleased(KeyEvent ke) {
|
---|
| 78 | String typed = text.getText();
|
---|
| 79 | if(!typed.matches("\\d+") || typed.length() > 3) {
|
---|
| 80 | uncertaintySlider.setDomainValue(0);
|
---|
| 81 | return;
|
---|
| 82 | }
|
---|
| 83 | int value = Integer.parseInt(typed);
|
---|
| 84 | uncertaintySlider.setDomainValue(value);
|
---|
| 85 | model.setNumberOfComparisons(value);
|
---|
| 86 | }
|
---|
| 87 | });
|
---|
| 88 |
|
---|
| 89 | text.setMaximumSize(new Dimension(20, 30));
|
---|
[30] | 90 |
|
---|
[69] | 91 | // add components to the panel
|
---|
| 92 | c.gridx = 0;
|
---|
| 93 | c.gridy = 0;
|
---|
| 94 | uncertaintyLevelPanel.add(rankingsLabel, c);
|
---|
| 95 |
|
---|
| 96 | c.gridx = 1;
|
---|
| 97 | uncertaintyLevelPanel.add(uncertaintySlider, c);
|
---|
| 98 |
|
---|
| 99 | c.gridx = 2;
|
---|
| 100 | uncertaintyLevelPanel.add(text, c);
|
---|
[30] | 101 |
|
---|
[69] | 102 | c.gridx = 0;
|
---|
| 103 | c.gridy = 1;
|
---|
| 104 | c.weighty = 1.0; //request any extra vertical space
|
---|
| 105 | this.errorLabel = new JLabel("Error rate");
|
---|
| 106 | uncertaintyLevelPanel.add(errorLabel, c);
|
---|
| 107 |
|
---|
| 108 | c.gridx = 1;
|
---|
| 109 | c.gridy = 1;
|
---|
[1] | 110 | this.errorSlider = createErrorSlider();
|
---|
[69] | 111 | uncertaintyLevelPanel.add(errorSlider, c);
|
---|
[30] | 112 |
|
---|
[69] | 113 | c.gridx = 0;
|
---|
| 114 | c.gridy = 2;
|
---|
| 115 | c.gridwidth = 3;
|
---|
| 116 |
|
---|
[65] | 117 | experimentalBox = new ExtendedCheckboxPanel("Grant agent access to real utility function (experimental setup)",
|
---|
[1] | 118 | model.getExperimentalModel());
|
---|
[30] | 119 | experimentalBox.getCheckBox().setSelected(true);
|
---|
[69] | 120 | uncertaintyLevelPanel.add(experimentalBox, c);
|
---|
[30] | 121 |
|
---|
[69] | 122 | c.gridx = 1;
|
---|
| 123 | c.gridy = 3;
|
---|
[70] | 124 | c.gridwidth = 1;
|
---|
[1] | 125 |
|
---|
| 126 | okButton = new ButtonPanel("OK", model.getConfirmationModel());
|
---|
[69] | 127 | uncertaintyLevelPanel.add(okButton, c);
|
---|
[1] | 128 |
|
---|
[69] | 129 | // setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
---|
| 130 |
|
---|
[1] | 131 | add(numberOfCompsLabel);
|
---|
[30] | 132 | add(uncertaintyLevelPanel);
|
---|
[44] | 133 |
|
---|
| 134 | frame.add(this);
|
---|
[69] | 135 | frame.setSize(500,300);
|
---|
[44] | 136 | frame.setLocationRelativeTo(null);
|
---|
| 137 | frame.setVisible(true);
|
---|
[1] | 138 | }
|
---|
| 139 |
|
---|
[42] | 140 |
|
---|
[66] | 141 | private SteppingSlider createUncertaintySlider()
|
---|
| 142 | {
|
---|
| 143 | final SteppingSlider steppingSlider = new SteppingSlider(model.getPossibleValues());
|
---|
| 144 | return steppingSlider;
|
---|
[1] | 145 | }
|
---|
| 146 |
|
---|
| 147 | private JSlider createErrorSlider() {
|
---|
| 148 | JSlider slider = new JSlider(JSlider.HORIZONTAL,0,100,0);
|
---|
| 149 | slider.setMajorTickSpacing( 1 );
|
---|
| 150 | slider.setMinorTickSpacing( 2 );
|
---|
| 151 | Hashtable<Integer, JLabel> sliderLabelsTable = new Hashtable<Integer, JLabel>();
|
---|
| 152 | sliderLabelsTable.put( 0 , new JLabel("0%") );
|
---|
| 153 | sliderLabelsTable.put( 100 , new JLabel("100%") );
|
---|
| 154 | slider.setLabelTable(sliderLabelsTable);
|
---|
| 155 | slider.setPaintLabels(true);
|
---|
[65] | 156 | // slider.setMaximumSize(new Dimension(50,50));
|
---|
[1] | 157 | slider.addChangeListener(new ChangeListener() {
|
---|
| 158 | @Override
|
---|
| 159 | public void stateChanged(ChangeEvent e) {
|
---|
| 160 | model.getErrorModel().setText(String.valueOf((double) slider.getValue() / 100));
|
---|
| 161 | }
|
---|
| 162 | });
|
---|
| 163 | return slider;
|
---|
| 164 | }
|
---|
| 165 |
|
---|
| 166 |
|
---|
| 167 | }
|
---|