Merge branch 'feature/JAL-3690_callback-based-web-services' into alpha/JAL-3066_Jalvi...
[jalview.git] / src / jalview / jbgui / GStructureChooser.java
index 240e1fd..b9c9267 100644 (file)
@@ -40,6 +40,7 @@ import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.KeyAdapter;
@@ -65,6 +66,7 @@ import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JTextField;
 import javax.swing.ListCellRenderer;
+import javax.swing.Timer;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.DocumentEvent;
@@ -255,10 +257,33 @@ public abstract class GStructureChooser extends JPanel
       mainFrame.pack();
     } catch (Exception e)
     {
+      System.out.println(e); // for JavaScript TypeError
       e.printStackTrace();
     }
   }
 
+  // BH SwingJS optimization
+  // (a) 100-ms interruptable timer for text entry -- BH 1/10/2019
+  // (b) two-character minimum, at least for JavaScript.
+  
+  private Timer timer; 
+  
+  protected void txt_search_ActionPerformedDelayed() {
+         if (timer != null) {
+                 timer.stop();
+         }
+         timer = new Timer(300, new ActionListener() {
+
+               @Override
+               public void actionPerformed(ActionEvent e) {
+                       txt_search_ActionPerformed();
+               }                 
+         });
+         timer.setRepeats(false);
+         timer.start();
+  }
+  //
+  
   /**
    * Initializes the GUI default properties
    * 
@@ -485,19 +510,19 @@ public abstract class GStructureChooser extends JPanel
       @Override
       public void insertUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
 
       @Override
       public void removeUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
 
       @Override
       public void changedUpdate(DocumentEvent e)
       {
-        txt_search_ActionPerformed();
+        txt_search_ActionPerformedDelayed();
       }
     });
 
@@ -636,7 +661,8 @@ public abstract class GStructureChooser extends JPanel
     Desktop.addInternalFrame(mainFrame, frameTitle, width, height);
   }
 
-  protected void closeAction(int preferredHeight)
+
+protected void closeAction(int preferredHeight)
   {
     // System.out.println(">>>>>>>>>> closing internal frame!!!");
     // System.out.println("width : " + mainFrame.getWidth());