source: src/main/java/genius/gui/panels/DoublePanel.java@ 228

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

Added elicitationCost GUI, using DoubleModel

File size: 2.4 KB
Line 
1package genius.gui.panels;
2
3import java.awt.BorderLayout;
4
5import javax.swing.JLabel;
6import javax.swing.JOptionPane;
7import javax.swing.JPanel;
8import javax.swing.JTextField;
9import javax.swing.SwingUtilities;
10import javax.swing.event.DocumentEvent;
11import javax.swing.event.DocumentListener;
12
13import genius.core.listener.Listener;
14
15/**
16 * Shows a single text line input area for a double value.
17 */
18@SuppressWarnings("serial")
19public class DoublePanel extends JPanel
20{
21 private final JLabel jlabel;
22 private final JTextField textfield;
23 DoubleModel model;
24
25 public DoublePanel(String label, final DoubleModel model)
26 {
27 setLayout(new BorderLayout());
28
29 this.model = model;
30 setLayout(new BorderLayout());
31
32 this.jlabel = new JLabel(label);
33 add(jlabel, BorderLayout.CENTER);
34
35 this.textfield = new JTextField(model.getValue() + "", 6);
36 add(textfield, BorderLayout.EAST);
37 // not working?
38 // setMaximumSize(new Dimension(99999999, 30));
39 textfield.getDocument().addDocumentListener(new DocumentListener() {
40
41 @Override
42 public void removeUpdate(DocumentEvent e) {
43 if (!textfield.getText().isEmpty())
44 {
45 model.setText(parseDouble());
46 }
47 // we ignore empty text to avoid reacting on replace procedure
48 // too early
49 }
50
51 @Override
52 public void insertUpdate(DocumentEvent e) {
53 model.setText(parseDouble());
54 }
55
56 @Override
57 public void changedUpdate(DocumentEvent e) {
58 model.setText(parseDouble());
59 }
60 });
61
62 model.addListener(new Listener<Double>() {
63 @Override
64 public void notifyChange(final Double data) {
65 SwingUtilities.invokeLater(new Runnable() {
66
67 @Override
68 public void run() {
69 textfield.setText("" + data);
70 updateEnabledness();
71 }
72 });
73 }
74 });
75
76 updateEnabledness();
77 }
78
79 private void updateEnabledness()
80 {
81 boolean enabled = !model.isLocked();
82 setEnabled(enabled);
83 textfield.setEnabled(enabled);
84 jlabel.setEnabled(enabled);
85 }
86
87 private double parseDouble()
88 {
89 double d = 0;
90 String text = textfield.getText();
91 String err = "The value \"" + text + "\" is not a valid number.";
92 try {
93 d = Double.parseDouble(text);
94 if (d < 0 || d > 1) {
95 showError(err);
96 return 0;
97 }
98 } catch (Exception e) {
99 showError(err);
100 return 0;
101 }
102 return d;
103 }
104
105 private void showError(String error)
106 {
107 JOptionPane.showMessageDialog(null, error, "Edit error", 0);
108 }
109
110 public JTextField getTextField() {
111 return textfield;
112 }
113}
Note: See TracBrowser for help on using the repository browser.