Refresh JList in a JFrame

Skizit picture Skizit · Nov 24, 2010 · Viewed 66.7k times · Source

I've got a JList which displays information from a vector. The user can then add and remove information from this vector. Is it possible to refresh the JList inside my JFrame when items are added / removed from the Vector? Currently I'm doing..

 list = new JList(names);
 jframe.add(new JScrollPane(list), BorderLayout.CENTER);

but this doesn't refresh the JList to anything new. I've check and my vector contents etc. do change but the list isn't refreshing. Why? how can I fix it?

Answer

camickr picture camickr · Nov 24, 2010

You should not be updating the Vector. Changes should be made directly to the ListModel then the table will repaint itself automatically.

If you decide to recreate the ListModel because of the changes to the Vector, then you update the list by doing:

list.setModel( theNewModel );

Edit: Forget the Vector and load the data directly into the DefaultListModel:

DefaultListModel model = new DefaultListModel();
model.addElement( "one" );
model.addElement( "two" );
JList list = new JList( model );

Now whenever you need to change the data you update the model directly using the addElement(), removeElement() or set() methods. The list will automatically be repainted.