private void uninstallTracking() {
   InputMap currMap = SwingUtilities.getUIInputMap(this.jcomp, JComponent.WHEN_FOCUSED);
   if (currMap != null) {
     InputMap newMap = new InputMap();
     KeyStroke[] kss = currMap.allKeys();
     for (int i = 0; i < kss.length; i++) {
       KeyStroke stroke = kss[i];
       Object val = currMap.get(stroke);
       if (stroke.equals(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0))
           && "flipTextSelection".equals(val)) {
         continue;
       }
       newMap.put(stroke, val);
     }
     SwingUtilities.replaceUIInputMap(this.jcomp, JComponent.WHEN_FOCUSED, newMap);
   }
   this.jcomp.getActionMap().remove("flipTextSelection");
 }
  private void installTracking() {
    InputMap currMap = SwingUtilities.getUIInputMap(this.jcomp, JComponent.WHEN_FOCUSED);

    InputMap newMap = new InputMap();
    if (currMap != null) {
      KeyStroke[] kss = currMap.allKeys();
      for (int i = 0; i < kss.length; i++) {
        KeyStroke stroke = kss[i];
        Object val = currMap.get(stroke);
        newMap.put(stroke, val);
      }
    }

    newMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "flipTextSelection");

    this.jcomp
        .getActionMap()
        .put(
            "flipTextSelection",
            new AbstractAction() {
              public void actionPerformed(ActionEvent e) {
                SwingUtilities.invokeLater(
                    new Runnable() {
                      public void run() {
                        int selectionLength = jcomp.getSelectionEnd() - jcomp.getSelectionStart();
                        if (selectionLength == 0) {
                          jcomp.selectAll();
                        } else {
                          int lastPos = jcomp.getSelectionEnd();
                          jcomp.setSelectionStart(0);
                          jcomp.setSelectionEnd(0);
                          jcomp.setCaretPosition(lastPos);
                        }
                      }
                    });
              }
            });

    SwingUtilities.replaceUIInputMap(this.jcomp, JComponent.WHEN_FOCUSED, newMap);
  }