Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.help > #2338

Re: Need simple example of how to safely pass data from worker to EDT swing threads.

From Nigel Wade <nmw@ion.le.ac.uk>
Newsgroups comp.lang.java.help
Subject Re: Need simple example of how to safely pass data from worker to EDT swing threads.
Date 2012-12-06 17:27 +0000
Message-ID <aic2rrF431U1@mid.individual.net> (permalink)
References <118db2e0-86dc-4d6b-aabb-ba68ee8c2f53@googlegroups.com>

Show all headers | View raw


On 06/12/12 15:07, kwiateks@gmail.com wrote:
> Hello Kinds Sirs,
>
> I need a simple runnable example of a swing application that has a GUI with a jcombobox filled with a long list of name/value objects (eg 3000 employee names and numbers). There is also a worker process that reads in a record from a file/database, and then updates the gui jcombo box so that the employee item is "selected".
>
> I was able to write something using  java map and employee objects to set the selected item in the jcombo box, but if I invoke setSelectedItem in the worker thread, I get odd results/delays.
>
> See below snippets... how should the worker thread pass the employee object back to the gui for it to setSelectedItem?
> ....
> empBuffer=  new Employee(id, lastName );
> map.put(empBuffer.getId()+"",empBuffer );
> model.addAll(map.values());
> Collections.sort(model);
> myComboBox1.setModel(new javax.swing.DefaultComboBoxModel(model));
> ....
> emp = (Employee) map.get(myData.getEmployeeNum());
> myComboBox1.setSelectedItem(emp);


Use SwingWorker and its publish()/process() and done() methods. Use 
publish() in the background thread to add each element to a list of 
objects to be processed by process(). In process() (which runs on the 
EDT) add the elements to the JComboBox model. In done() select the 
element you want in the JComboBox model.

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

Although this may not solve the problem you were previously having, 
which is most likely caused by having too many objects in the JComboBox. 
You will still have the same number of objects in the JComboBox when 
SwingWorker.done() is completed.

When you open the JComboBox the EDT has to render all 3000 objects into 
the popup list.

Back to comp.lang.java.help | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Need simple example of how to safely pass data from worker to EDT swing threads. kwiateks@gmail.com - 2012-12-06 07:07 -0800
  Re: Need simple example of how to safely pass data from worker to EDT swing threads. Eric Sosman <esosman@comcast-dot-net.invalid> - 2012-12-06 10:29 -0500
    Re: Need simple example of how to safely pass data from worker to EDT swing threads. kedward777@gmail.com - 2012-12-06 09:09 -0800
  Re: Need simple example of how to safely pass data from worker to EDT   swing threads. Nigel Wade <nmw@ion.le.ac.uk> - 2012-12-06 17:27 +0000
    Re: Need simple example of how to safely pass data from worker to EDT   swing threads. Lew <lewbloch@gmail.com> - 2012-12-06 11:10 -0800
  Re: Need simple example of how to safely pass data from worker to EDT swing threads. Roedy Green <see_website@mindprod.com.invalid> - 2012-12-06 15:03 -0800

csiph-web