summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java
diff options
context:
space:
mode:
authorSimon Rettberg2018-06-20 17:01:59 +0200
committerSimon Rettberg2018-06-20 17:01:59 +0200
commite30422516ba4f22b1c5ff67c1f0e00521d602b62 (patch)
treeef5b16f3d76e25ea3ff336da990e84245933973c /dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java
parent[server] Don't use shared instance in multi-threaded app (diff)
downloadtutor-module-e30422516ba4f22b1c5ff67c1f0e00521d602b62.tar.gz
tutor-module-e30422516ba4f22b1c5ff67c1f0e00521d602b62.tar.xz
tutor-module-e30422516ba4f22b1c5ff67c1f0e00521d602b62.zip
[client] Add GUI change handling classes
Code to track if a dialog contains modified controls has been messy, error prone and all over the place. Adding a control to a dialog required adding multiple fields to the dialog class and adding new code in multiple places. This is an approach to create a centralized facility that would only require adding all controls of a dialog to the monitor in one place, and then defining a callback to get informed when the validity or content of the whole form changes. The monitor class will also remember the original state of the dialog, so you can tell if the user undoes their changes manually.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java
new file mode 100644
index 00000000..d77a5aa5
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/EditableComboBoxWrapper.java
@@ -0,0 +1,33 @@
+package org.openslx.dozmod.gui.changemonitor;
+
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Comparator;
+
+import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.ValidationConstraint;
+import org.openslx.dozmod.gui.control.ComboBox;
+
+/**
+ * Monitoring a ComboBox that is editable
+ */
+class EditableComboBoxWrapper extends AbstractControlWrapper<Object> {
+ private final ComboBox<?> comboBox;
+
+ public EditableComboBoxWrapper(DialogChangeMonitor dcm, ComboBox<?> combo, Comparator<Object> comparator, ValidationConstraint<Object> constraint, String errorMessage) {
+ super(dcm, errorMessage, comparator, constraint);
+ comboBox = combo;
+ comboBox.addItemListener(new ItemListener() {
+ public void itemStateChanged(ItemEvent e) {
+ if (e.getStateChange() != ItemEvent.SELECTED)
+ return;
+ contentChanged();
+ }
+ });
+ }
+
+ @Override
+ Object getCurrentValue() {
+ return comboBox.getEditor().getItem();
+ }
+
+} \ No newline at end of file