Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #3732 > unrolled thread
| Started by | "RedGrittyBrick" <redgrittybrick@THRWHITE.remove-dii-this> |
|---|---|
| First post | 2011-04-27 15:46 +0000 |
| Last post | 2011-04-27 15:46 +0000 |
| Articles | 1 — 1 participant |
Back to article view | Back to comp.lang.java.gui
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: (newbie) How to get t "RedGrittyBrick" <redgrittybrick@THRWHITE.remove-dii-this> - 2011-04-27 15:46 +0000
| From | "RedGrittyBrick" <redgrittybrick@THRWHITE.remove-dii-this> |
|---|---|
| Date | 2011-04-27 15:46 +0000 |
| Subject | Re: (newbie) How to get t |
| Message-ID | <Q6idndodCMXs1_jVnZ2dneKdnZzinZ2d@bt.com> |
To: comp.lang.java.gui
Knute Johnson wrote:
> mrstephengross wrote:
>> So here's my next swing question: I've got a combo box with an action
>> listener. When you make a selection from the combo box, the action
>> listener fires off and does a bunch of stuff that takes a few seconds
>> to execute.
>>
>> However! While the action listener is executing, the combo box does
>> NOT collapse. That is, I would expect it to first collapse (with the
>> new selection highlighted) and THEN fully executed the action
>> listener's code.
>>
>> Is there a way to do this? I've been trying out various
>> implementations of the action listener to get it work, such as:
>>
>> public void actionPerformed(ActionEvent e)
>> { comboBox.setPopupVisible(false); /* do other stuff */; }
>> public void actionPerformed(ActionEvent e) { comboBox.validate(); /
>> * do other stuff */; }
>> public void actionPerformed(ActionEvent e)
>> { applicationFrame.validate(); /* do other stuff */; }
>>
>> But nothing seems to work. I've even tried the:
>> SwingUtilities.invokeLater(new Runnable() { comboBox.validate(); /
>> *...*/ });
>>
>> trick, to no avail. Any ideas? Or am I just misunderstanding the UI's
>> built-in behavior?
>>
>> Thanks,
>> --Steve
>
> You are blocking the Event Dispatch Thread. ActionListener (and most
> other listeners) perform their event handling on the EDT. So while your
> code is off for a few seconds it is preventing your GUI from updating.
> Just wrap your time consuming code in a Runnable and start another thread.
>
> public void actionPeformed(ActionEvent ae) {
> Runnable r = new Runnable() {
> public void run() {
> // time consuming task
> }
> };
> new Thread(r).start();
> }
>
> If you have to update the GUI with the results of your time consuming
> task you may or may not have to wrap that code in
> EventQueue.invokeLater() to get it to execute on the EDT. Most Swing
> methods are not thread safe and need to be executed on the EDT. Check
> the docs for which are which.
>
The SwingWorker class is well worth using IMO.
--
RGB
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24
Back to top | Article view | comp.lang.java.gui
csiph-web