3434import java .awt .BorderLayout ;
3535import java .awt .Color ;
3636import java .awt .Component ;
37+ import java .awt .Container ;
3738import java .awt .Dimension ;
3839import java .awt .GridLayout ;
3940import java .awt .Window ;
4041import java .awt .event .FocusEvent ;
4142import java .awt .event .FocusListener ;
4243import java .awt .event .KeyAdapter ;
4344import java .awt .event .KeyEvent ;
45+ import java .awt .event .KeyListener ;
4446import java .net .URL ;
4547import java .util .Collections ;
4648import java .util .Comparator ;
5052import java .util .function .Function ;
5153import java .util .stream .Collectors ;
5254
55+ import javax .swing .AbstractButton ;
5356import javax .swing .Box ;
5457import javax .swing .BoxLayout ;
5558import javax .swing .DefaultListModel ;
5659import javax .swing .ImageIcon ;
5760import javax .swing .JButton ;
61+ import javax .swing .JComboBox ;
5862import javax .swing .JDialog ;
5963import javax .swing .JLabel ;
6064import javax .swing .JList ;
@@ -357,6 +361,8 @@ public SwingSearchPanel() {
357361 });
358362 }
359363 });
364+
365+ resultsList .addKeyListener (new SearchPanelKeyAdapter ());
360366
361367 setLayout (new BorderLayout ());
362368 setPreferredSize (new Dimension (800 , 300 ));
@@ -365,6 +371,7 @@ public SwingSearchPanel() {
365371 splitPane .setLeftComponent (resultsPane );
366372 splitPane .setRightComponent (detailsPane );
367373 add (splitPane , BorderLayout .CENTER );
374+
368375 }
369376
370377 public void search (final String text ) {
@@ -503,6 +510,17 @@ private boolean isFirstNonHeader(final int index) {
503510 return true ;
504511 }
505512 }
513+
514+ private class SearchPanelKeyAdapter extends KeyAdapter {
515+ @ Override
516+ public void keyPressed (final KeyEvent e ) {
517+ switch (e .getKeyCode ()) {
518+ case KeyEvent .VK_ESCAPE :
519+ reset ();
520+ break ;
521+ }
522+ }
523+ }
506524
507525 /** A header dividing search result entries. */
508526 private class SearchResultHeader implements SearchResult {
0 commit comments