فهرست منبع

SettingsWindow: use document listener for listening to changes

Henrik Kunzelmann 3 سال پیش
والد
کامیت
430d81a1b7
2فایلهای تغییر یافته به همراه26 افزوده شده و 4 حذف شده
  1. 4 4
      src/holeg/ui/SettingsWindow.java
  2. 22 0
      src/holeg/ui/SimpleDocumentListener.java

+ 4 - 4
src/holeg/ui/SettingsWindow.java

@@ -101,9 +101,9 @@ public class SettingsWindow extends JDialog {
 
         // Create text field
         JTextField textField = createTextField(Integer.toString(value));
-        textField.addActionListener((e) -> {
+        textField.getDocument().addDocumentListener((SimpleDocumentListener)(e) -> {
             if (listener != null) {
-                String text = ((JTextField) e.getSource()).getText();
+                String text = textField.getText();
                 try {
                     listener.accept(Integer.parseInt(text));
                 }
@@ -125,9 +125,9 @@ public class SettingsWindow extends JDialog {
 
         // Create text field
         JTextField textField = createTextField(Double.toString(value));
-        textField.addActionListener((e) -> {
+        textField.getDocument().addDocumentListener((SimpleDocumentListener)(e) -> {
             if (listener != null) {
-                String text = ((JTextField) e.getSource()).getText();
+                String text = textField.getText();
                 try {
                     listener.accept(Double.parseDouble(text));
                 }

+ 22 - 0
src/holeg/ui/SimpleDocumentListener.java

@@ -0,0 +1,22 @@
+package holeg.ui;
+
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+@FunctionalInterface
+public interface SimpleDocumentListener extends DocumentListener {
+    void update(DocumentEvent e);
+
+    @Override
+    default void insertUpdate(DocumentEvent e) {
+        update(e);
+    }
+    @Override
+    default void removeUpdate(DocumentEvent e) {
+        update(e);
+    }
+    @Override
+    default void changedUpdate(DocumentEvent e) {
+        update(e);
+    }
+}