Re: Long delay when using JComboBox.setSelectedIndex() ??
kedwa...@gmail.com wrote:
I am attempting to load 5000 employee items into a jcombobox, and then se=
tSelectedIndex, but I am getting a odd delay in the gui after setting the s=
electedIndex
1) If I load the 5000 employee names using a simple vector, it works fine=
.. When I call
'vector' or "vector" or 'Vector'?
setSelectedIndex(5), it sets the combobox to the 5th element, very quickl=
y. This works fine:
while ((line = input.readLine()) != null) {
This is a slow action on the EDT. Bad.
StringTokenizer st = new StringTokenizer(line, "|");
lastName = st.nextToken().trim();
firstName = st.nextToken().trim();
id = Integer.parseInt(st.nextToken().trim());
'lastName, 'firstName', and 'id' should be declared locally to the loop.
comboBoxItems.add(lastName);}
mybox1.setModel(new javax.swing.DefaultComboBoxModel(mode=
l));
mybox1.setSelectedIndex(5);
2)HOWEVER, if I load an employee object into a mapped vector, and then se=
tSelectedIndex(5), I DO
What is a "mapped vector"?
see it instantly set the GUI combobox to the 5th item, BUT then there is =
a LOOOONG delay in the gui (1 minute or more) before it allows me to do any=
thing further in the gui
while ((line = input.readLine()) != null) {
This is a slow action on the EDT. Bad.
StringTokenizer st = new StringTokenizer(line, "|");
lastName = st.nextToken().trim();
firstName = st.nextToken().trim();
id = Integer.parseInt(st.nextToken().trim());
empBuffer= new Employee(id, lastName );
'lastName, 'firstName', 'id' and 'empBuffer' should be declared locally to =
the loop.
map.put(empBuffer.getId()+"",empBuffer );
count++; }
model.addAll(map.values());
Collections.sort(model);
mybox1.setModel(new javax.swing.DefaultComboBoxModel(model))=
;
mybox1.setSelectedIndex(5);
public class Employee implements Comparable {
private int id;
private String name;
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public int compareTo(Object emp) {
return getName().compareTo(((Employee)emp).getName());
}
public String toString() {
return getName()+","+getId();
}
}
You should override 'equals()' to match 'compareTo()' so the model will wor=
k right.
kedwa...@gmail.com wrote:
CORRECTION, both examples have the same problem. I thought the first exam=
ple was working, but in each case AFTER I call setSelectedIndex, the GUI DO=
ES quickly go to the item in the combobox , but then the whole gui hangs fo=
r about a minute ???? Why? If I replace the combobox with a jtextfield, it =
works without delay...
How long does 'input.readLine()' take, and why are you doing it on the EDT?
I/O is much slower than CPU activity. You are causing the GUI to wait for 5=
000 lines of read. Bad.
Don't do it on the EDT.
--
Lew