Popup similar to Tooltip

  • Follow


I want a simple popup for few secondsPopup popup = new Popup(null, new JLabel("Done"), 10, 10);popup.show();try {    Thread.sleep(2000);} catch (InterruptedException ie) {}popup.hide();Everything is OK except I don't see the word "Done" in the label.If I comment out the lines for try, Thread.sleep(###) and catchThen I can see the word "Done in the label, then I can't make the popupfor few seconds.Anyone knows why the word "Done" won't show up if I use Thread.sleep?Any idea how do I fix the problem?I don't need JProgressBar nor JMonitor for  my simple application.I want similar to the Tooltip popup for few seconds, but withoutmove the mouse pointer to a particular JComponent.Thank you in advance!
0
Reply RC 2/25/2008 8:50:49 PM

RC wrote:> > I want a simple popup for few seconds> > Popup popup = new Popup(null, new JLabel("Done"), 10, 10);> popup.show();> > try {>    Thread.sleep(2000);> } catch (InterruptedException ie) {> }> popup.hide();> > Everything is OK except I don't see the word "Done" in the label.> If I comment out the lines for try, Thread.sleep(###) and catch> Then I can see the word "Done in the label, then I can't make the popup> for few seconds.> > Anyone knows why the word "Done" won't show up if I use Thread.sleep?     You're probably doing the whole thing on the eventdispatching thread, which means the entire GUI stallswhile you're in sleep().  Presumably, it stalls just amoment or two before the text would have become visible,and when sleep() returns you tear down the popup beforethe text has a chance to finish painting. > Any idea how do I fix the problem?     Do your sleeping on a separate thread, letting theEDT run without interruption.  In your separate thread,use SwingUtilities.invokeLater() to do things to the GUI.-- Eric.Sosman@sun.com
0
Reply Eric 2/25/2008 9:44:01 PM


Eric Sosman wrote:> RC wrote:>>>> I want a simple popup for few seconds>>>> Popup popup = new Popup(null, new JLabel("Done"), 10, 10);>> popup.show();>>>> try {>>    Thread.sleep(2000);>> } catch (InterruptedException ie) {>> }>> popup.hide();>>>> Everything is OK except I don't see the word "Done" in the label.>> If I comment out the lines for try, Thread.sleep(###) and catch>> Then I can see the word "Done in the label, then I can't make the popup>> for few seconds.>>>> Anyone knows why the word "Done" won't show up if I use Thread.sleep?> >     You're probably doing the whole thing on the event> dispatching thread, which means the entire GUI stalls> while you're in sleep().  Presumably, it stalls just a> moment or two before the text would have become visible,> and when sleep() returns you tear down the popup before> the text has a chance to finish painting.> >  > Any idea how do I fix the problem?> >     Do your sleeping on a separate thread, letting the> EDT run without interruption.  In your separate thread,> use SwingUtilities.invokeLater() to do things to the GUI.> Actually, I suggest using a Timer task instead of Thread.sleep in any case.-- Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
0
Reply Daniel 2/25/2008 11:09:01 PM

Daniel Pitts wrote:

> Actually, I suggest using a Timer task instead of Thread.sleep in any case.

Two thumbs up!
0
Reply RC 2/26/2008 2:48:50 PM

On Mon, 25 Feb 2008 15:50:49 -0500, RC <raymond.chui@nospam.noaa.gov>
wrote, quoted or indirectly quoted someone who said :

>try {
>    Thread.sleep(2000);
>} catch (InterruptedException ie) {
>}
>popup.hide();

your problem is you made the Swing thread sleep, so it can't do any
painting work, i.e. serving the event queue.

See http://mindprod.com/jgloss/timer.html
http://mindprod.com/jgloss/sleep.html
--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
0
Reply Roedy 2/26/2008 10:15:41 PM

4 Replies
272 Views

(page loaded in 0.163 seconds)

Similiar Articles:




7/27/2012 5:58:05 PM


Reply: