JAL-796 JAL-1652 better implementation (key binding not KeyListener)
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 20 May 2015 09:34:42 +0000 (10:34 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 20 May 2015 09:34:42 +0000 (10:34 +0100)
src/jalview/gui/Finder.java

index 4397a48..5d07562 100755 (executable)
 package jalview.gui;
 
 import java.awt.event.ActionEvent;
-import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
-import java.beans.PropertyVetoException;
 import java.util.Vector;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
 import javax.swing.JInternalFrame;
 import javax.swing.JLayeredPane;
 import javax.swing.JOptionPane;
+import javax.swing.KeyStroke;
 
 import jalview.datamodel.SearchResults;
 import jalview.datamodel.SequenceFeature;
@@ -92,7 +93,7 @@ public class Finder extends GFinder
     frame = new JInternalFrame();
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    addKeyListener();
+    addEscapeHandler();
     Desktop.addInternalFrame(frame, MessageManager.getString("label.find"),
             WIDTH, HEIGHT);
 
@@ -100,39 +101,31 @@ public class Finder extends GFinder
   }
 
   /**
-   * Add a key listener that closes the find dialog on 'Esc' key press
+   * Add a handler for the Escape key when the window has focus
    */
-  private void addKeyListener()
+  private void addEscapeHandler()
   {
-    /*
-     * add the listener to the field with focus
-     */
-    textfield.addKeyListener(new KeyAdapter()
+    getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+            KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel");
+    getRootPane().getActionMap().put("Cancel", new AbstractAction()
     {
-      @Override
-      public void keyPressed(KeyEvent evt)
+      public void actionPerformed(ActionEvent e)
       {
-        switch (evt.getKeyCode())
-        {
-        case 27:
-          // close this window on Esc key
-          Finder.this.setVisible(false);
-          try
-          {
-            Finder.this.frame.setClosed(true);
-          } catch (PropertyVetoException e)
-          {
-            // ignore
-          }
-          break;
-        default:
-          break;
-        }
+        escapeActionPerformed();
       }
     });
   }
 
   /**
+   * Close the panel on Escape key press
+   */
+  protected void escapeActionPerformed()
+  {
+    setVisible(false);
+    frame.dispose();
+  }
+
+  /**
    * Performs the 'Find Next' action.
    * 
    * @param e