Skip to content

Commit deb52c8

Browse files
committed
SwingSearchBar: infer parent components
We can glean the parent container with getParent(), and the containing window with SwingUtilities.getWindowAncestor.
1 parent 63b8ac4 commit deb52c8

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

src/main/java/org/scijava/ui/swing/search/SwingSearchBar.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)