3737import java .awt .Font ;
3838import java .awt .GridLayout ;
3939import java .awt .Window ;
40+ import java .awt .event .ActionListener ;
4041import java .awt .event .FocusEvent ;
4142import java .awt .event .FocusListener ;
4243import java .awt .event .KeyAdapter ;
4344import java .awt .event .KeyEvent ;
45+ import java .beans .PropertyChangeListener ;
4446import java .net .URL ;
4547import java .util .Collections ;
4648import java .util .Comparator ;
@@ -119,20 +121,23 @@ public class SwingSearchBar extends JTextField {
119121 private final Window window ;
120122 private final Container parent ;
121123 private SwingSearchPanel searchPanel ;
124+
125+ private DocumentListener documentListener ;
122126
123127 public SwingSearchBar (final Context context , final Window window , final Container parent ) {
124128 super (DEFAULT_MESSAGE , 12 );
125129 this .parent = parent ;
126130 this .window = window ;
127131 context .inject (this );
132+ setText (DEFAULT_MESSAGE );
128133
129134 setBorder (BorderFactory .createCompoundBorder (
130135 BorderFactory .createLineBorder (new Color (237 ,237 ,237 ), 5 ),
131136 BorderFactory .createEmptyBorder (5 ,5 ,5 ,5 )));
132137
133138 addActionListener (e -> run ());
134139 addKeyListener (new SearchBarKeyAdapter ());
135- getDocument (). addDocumentListener ( new DocumentListener () {
140+ documentListener = new DocumentListener () {
136141
137142 @ Override
138143 public void insertUpdate (final DocumentEvent e ) {
@@ -149,12 +154,14 @@ public void changedUpdate(final DocumentEvent e) {
149154 search ();
150155 }
151156
152- });
157+ };
158+ getDocument ().addDocumentListener (documentListener );
153159 addFocusListener (new FocusListener () {
154160
155161 @ Override
156162 public void focusGained (final FocusEvent e ) {
157163 if (DEFAULT_MESSAGE .equals (getText ())) setText ("" );
164+ setForeground (new Color (0 ,0 ,0 ));
158165 }
159166
160167 @ Override
@@ -213,8 +220,8 @@ private void search() {
213220 parent .add (searchPanel , "south,height 300!" , getParent ().getComponentCount ()-1 );
214221 parent .doLayout ();
215222 parent .revalidate ();
216- parent .repaint ();
217223 window .pack ();
224+ parent .repaint ();
218225 threadService .queue (() -> {
219226 searchPanel .setVisible (true );
220227 try { Thread .sleep (100 ); }
@@ -235,19 +242,25 @@ private void run() {
235242
236243 private void reset () {
237244 assertDispatchThread ();
238- if (searchPanel == null ) loseFocus ();
245+ if (searchPanel == null ){
246+ loseFocus ();
247+ getDocument ().removeDocumentListener (documentListener );
248+ setText (DEFAULT_MESSAGE );
249+ setForeground (new Color (150 ,150 ,150 ));
250+ getDocument ().addDocumentListener (documentListener );
251+ }
239252 else {
240253 threadService .queue (() -> {
241254 parent .remove (searchPanel );
242255 parent .revalidate ();
243- parent .repaint (50L );
256+ parent .repaint ();
244257 window .revalidate ();
245258 window .pack ();
246- window .repaint (50L );
259+ window .repaint ();
247260 searchPanel = null ;
248261 });
262+ setText ("" );
249263 }
250- setText ("" );
251264 }
252265
253266 private void loseFocus () {
0 commit comments