Re: Long delay when using JComboBox.setSelectedIndex() ??
Thank you for your input!
I know doing io on the EDT is not optimal, but I was just trying to provide=
a short code snippet to illustrate the problem. The issue is happening wel=
l AFTER I load the employee names from disk. The delay is happening right a=
fter I setSelectedIndex(3) on the jcombobox..
Can you show me how to override equals ??
Thank you again!
Ken
On Wednesday, December 5, 2012 1:35:50 PM UTC-5, Lew wrote:
kedwa...@gmail.com wrote:
I am attempting to load 5000 employee items into a jcombobox, and then =
setSelectedIndex, but I am getting a odd delay in the gui after setting the=
selectedIndex
1) If I load the 5000 employee names using a simple vector, it works fi=
ne. When I call
'vector' or "vector" or 'Vector'?
setSelectedIndex(5), it sets the combobox to the 5th element, very quic=
kly. 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(mo=
del));
mybox1.setSelectedIndex(5);
2)HOWEVER, if I load an employee object into a mapped vector, and then =
setSelectedIndex(5), I DO
What is a "mapped vector"?
see it instantly set the GUI combobox to the 5th item, BUT then there i=
s a LOOOONG delay in the gui (1 minute or more) before it allows me to do a=
nything 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 t=
o 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 w=
ork right.
kedwa...@gmail.com wrote:
CORRECTION, both examples have the same problem. I thought the first ex=
ample was working, but in each case AFTER I call setSelectedIndex, the GUI =
DOES quickly go to the item in the combobox , but then the whole gui hangs =
for about a minute ???? Why? If I replace the combobox with a jtextfield, i=
t works without delay...
How long does 'input.readLine()' take, and why are you doing it on the ED=
T?
I/O is much slower than CPU activity. You are causing the GUI to wait for=
5000 lines of read. Bad.
Don't do it on the EDT.
--
Lew