source: src/main/java/genius/gui/uncertainty/PairwiseComparisonPanel.java@ 69

Last change on this file since 69 was 69, checked in by Tim Baarslag, 6 years ago

Completely new GUI for uncertainty

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