@@ -122,8 +122,6 @@ public class SwingSearchBar extends JTextField {
122122 @ Parameter
123123 private PluginService pluginService ;
124124
125- private final Window window ;
126- private final Container parent ;
127125 private SwingSearchPanel searchPanel ;
128126
129127 private DocumentListener documentListener ;
@@ -132,10 +130,8 @@ public class SwingSearchBar extends JTextField {
132130
133131 private String searchTerm ;
134132
135- public SwingSearchBar (final Context context , final Window window , final Container parent ) {
133+ public SwingSearchBar (final Context context ) {
136134 super (DEFAULT_MESSAGE , 12 );
137- this .parent = parent ;
138- this .window = window ;
139135 context .inject (this );
140136 setText (DEFAULT_MESSAGE );
141137 setForeground (SEARCHBAR_FONT_DEFAULT_COLOR );
@@ -225,6 +221,10 @@ private void assertDispatchThread() {
225221 }
226222 }
227223
224+ private Window window () {
225+ return SwingUtilities .getWindowAncestor (this );
226+ }
227+
228228 /** Called whenever the user types something. */
229229 private void search () {
230230 assertDispatchThread ();
@@ -235,11 +235,11 @@ private void search() {
235235 }
236236
237237 searchPanel = new SwingSearchPanel (); // Spawns the SearchOperation!
238- parent .add (searchPanel , "south,height 300!" , getParent ().getComponentCount ()-1 );
239- parent .doLayout ();
240- parent .revalidate ();
241- window .pack ();
242- parent .repaint ();
238+ getParent () .add (searchPanel , "south,height 300!" , getParent ().getComponentCount ()-1 );
239+ getParent () .doLayout ();
240+ getParent () .revalidate ();
241+ window () .pack ();
242+ getParent () .repaint ();
243243 threadService .queue (() -> {
244244 searchPanel .setVisible (true );
245245 try { Thread .sleep (100 ); }
@@ -269,12 +269,13 @@ private void reset() {
269269 }
270270 else {
271271 threadService .queue (() -> {
272- parent .remove (searchPanel );
273- parent .revalidate ();
274- parent .repaint ();
275- window .revalidate ();
276- window .pack ();
277- window .repaint ();
272+ getParent ().remove (searchPanel );
273+ getParent ().revalidate ();
274+ getParent ().repaint ();
275+ final Window w = window ();
276+ w .revalidate ();
277+ w .pack ();
278+ w .repaint ();
278279 searchPanel = null ;
279280 });
280281 setText ("" );
@@ -314,16 +315,19 @@ public SwingSearchPanel() {
314315 cellHasFocus ) -> {
315316 if (isHeader (value )) {
316317 final Searcher searcher = ((SearchResultHeader ) value ).searcher ();
318+
319+ final Container parent = getParent ();
320+
317321 final JCheckBox headerBox = //
318322 new JCheckBox (searcher .title (), searchService .enabled (searcher ));
319323 headerBox .setFont (smaller (headerBox .getFont (), 2 ));
320- headerBox .setBackground (parent .getBackground ());
324+ if ( parent != null ) headerBox .setBackground (parent .getBackground ());
321325 headerCheckboxes .put (searcher .getClass (), headerBox );
322326
323327 final JPanel headerInnerPane = new JPanel ();
324328 headerInnerPane .setLayout (new GridLayout (1 , 1 ));
325329 headerInnerPane .add (headerBox );
326- headerInnerPane .setBackground (parent .getBackground ());
330+ if ( parent != null ) headerInnerPane .setBackground (parent .getBackground ());
327331
328332 final JPanel headerOuterPane = new JPanel ();
329333 headerOuterPane .setLayout (new GridLayout (1 , 1 ));
@@ -485,7 +489,7 @@ public void mouseMoved( MouseEvent e ) {
485489 resultsList .addKeyListener (new SearchBarKeyAdapter ());
486490
487491 // uncomment the following lines to hide the JSplitPane divider borders
488- // Border border = new CompoundBorder(new LineBorder(parent .getBackground(), 1), new LineBorder(parent .getBackground(), 5));
492+ // Border border = new CompoundBorder(new LineBorder(getParent() .getBackground(), 1), new LineBorder(getParent() .getBackground(), 5));
489493// UIManager.put("SplitPaneDivider.border", border);
490494 final JSplitPane splitPane = new JSplitPane (JSplitPane .HORIZONTAL_SPLIT );
491495 splitPane .setLeftComponent (resultsPane );
0 commit comments