2010-11-24 31 views
18

Tengo una JList que muestra información de un vector. El usuario puede agregar y eliminar información de este vector. ¿Es posible actualizar la JList dentro de mi JFrame cuando se agregan/eliminan elementos del Vector? Actualmente estoy haciendo ..Refresh JList en un JFrame

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

pero esto no actualiza el JList a nada nuevo. Revisé y mis contenidos vectoriales, etc. cambian pero la lista no es refrescante. ¿Por qué? ¿Cómo puedo arreglarlo?

+1

¿Qué clase está utilizando como modelo de JList? El ListModel es el encargado de notificar cuándo se ha actualizado, de modo que JList pueda rediseñarse cuando cambien sus datos subyacentes. –

+0

Mike, si pones eso en una respuesta, lo votaría mejor. –

Respuesta

26

No debe actualizar el Vector. Los cambios deben hacerse directamente al ListModel, luego la tabla se volverá a pintar automáticamente.

Si decide recrear la ListModel debido a los cambios en el vector, a continuación, actualice la lista haciendo:

list.setModel(theNewModel); 

Editar: Olvida el vector y cargar los datos directamente en el DefaultListModel:

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

Ahora, cada vez que necesite cambiar los datos, actualice el modelo directamente utilizando los métodos addElement(), removeElement() o set(). La lista se volverá a pintar automáticamente.

0

Creo que encontré la solución para el gráfico 'actualización' de Jlist. Intente llamar a este método después de cada elemento de agregar o quitar del modelo que está en la lista J.

Jlist_name.ensureIndexIsVisible (model_name.getSize());