Swing JFC Java

/*
Definitive Guide to Swing for Java 2, Second Edition
By John Zukowski     
ISBN: 1-893115-78-X
Publisher: APress
*/
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.Timer;
public class MultiKeyCombo {
  public static void main(String args[]) {
    String labels[] = { "One", "Only", "Once", "Okay", "oneself",
        "onlooker", "Onslaught", "Onyx", "onus", "onward" };
    JFrame f = new JFrame("Example JList");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComboBox jc = new JComboBox(labels);
    MultiKeySelectionManager mk = new MultiKeySelectionManager();
    jc.setKeySelectionManager(mk);
    //    jc.setKeySelectionManager (new JComboBox.KeySelectionManager() {
    //      public int selectionForKey (char aKey, ComboBoxModel aModel) {
    //        return -1;
    //      }
    //    });
    Container c = f.getContentPane();
    c.add(jc, BorderLayout.NORTH);
    f.setSize(200, 200);
    f.setVisible(true);
  }
}
class MultiKeySelectionManager implements JComboBox.KeySelectionManager {
  private StringBuffer currentSearch = new StringBuffer();
  private Timer resetTimer;
  private final static int RESET_DELAY = 3000;
  public MultiKeySelectionManager() {
    resetTimer = new Timer(RESET_DELAY, new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        currentSearch.setLength(0);
      }
    });
  }
  public int selectionForKey(char aKey, ComboBoxModel aModel) {
    // Reset if invalid character
    if (aKey == KeyEvent.CHAR_UNDEFINED) {
      currentSearch.setLength(0);
      return -1;
    }
    // Since search, don't reset search
    resetTimer.stop();
    // Convert input to uppercase
    char key = Character.toUpperCase(aKey);
    // Build up search string
    currentSearch.append(key);
    // Find selected position within model to starting searching from
    Object selectedElement = aModel.getSelectedItem();
    int selectedIndex = -1;
    if (selectedElement != null) {
      for (int i = 0, n = aModel.getSize(); i < n; i++) {
        if (aModel.getElementAt(i) == selectedElement) {
          selectedIndex = i;
          break;
        }
      }
    }
    boolean found = false;
    String search = currentSearch.toString();
    // Search from selected forward, wrap back to beginning if not found
    for (int i = 0, n = aModel.getSize(); i < n; i++) {
      String element = aModel.getElementAt(selectedIndex).toString()
          .toUpperCase();
      if (element.startsWith(search)) {
        found = true;
        break;
      }
      selectedIndex++;
      if (selectedIndex == n) {
        selectedIndex = 0; // wrap
      }
    }
    // Restart timer
    resetTimer.start();
    return (found ? selectedIndex : -1);
  }
}