Foros del Web » Programación para mayores de 30 ;) » Java »

Cómo refrescar JList en java????

Estas en el tema de Cómo refrescar JList en java???? en el foro de Java en Foros del Web. Hola, estoy usando un JComboBox, y dependiendo de qué opcion seleccione en este JComboBox debe aparecer en el JList una u otra información. En el ...
  #1 (permalink)  
Antiguo 25/05/2010, 15:41
 
Fecha de Ingreso: mayo-2010
Mensajes: 32
Antigüedad: 14 años
Puntos: 0
Pregunta Cómo refrescar JList en java????

Hola, estoy usando un JComboBox, y dependiendo de qué opcion seleccione en este JComboBox debe aparecer en el JList una u otra información.

En el JList he usado DefaultListMode para meterle la informacion. A continuación os muestro como lo he usado y el problema que me surge.

Tengo una clase VentanaAsignarNotas, donde en el mismo constructor le paso los parametros necesarios para crearla directamente.

En ese constructor tengo un Listener (escuchador de eventos, para el JComboBox). Os muestro parte de dicho constructor a continuación:



Código PHP:
//Creo el JComboBox
JComboBox c_grupos;

...

//Le añado un comando para identificarlo en el escuchador
this.c_grupos.setActionCommand("ELEGIR GRUPO");

//Creo un escuchador para el JComboBox
GestionBotonAsignarNotas cg=new GestionBotonAsignarNotas(this);
this.c_grupos.addActionListener(cg); 






En la clase GestionBotonAsignarNotas (clase escuchador) tengo este método:

Código PHP:
//Método
public void actionPerformed(ActionEvent e) {
if (
"ELEGIR GRUPO".equals(e.getActionCommand())){

//Creo un objeto Alumno que me servirá más adelante
Alumno alum_aux;

//Guardo la cadena de texto que aparece en la seleccion del JComboBox de la clase VentanaAsignarNotas (vant es un objeto de la clase VentanaAsignarNotas que le paso como parameto al constructor de la clase escuchador GestionBotonAsignarNotas)
String grupo_seleccionado=(String) this.vant.c_grupos.getSelectedItem();


int i;


//Recorremos un arraylist que le pasamos a esta clase (GestionBotonAsignarNotas) por el constructor

for (i=0;i<this.bd_usuarios.usuarios.size();i++){
//Guardamos el objeto de la posicion (i)
alum_aux=(Alumnothis.bd_usuarios.usuarios.get(i);

//Si el atributo "grupo" de alum_aux es igual a lo seleccionado en el JComboBox...
if (alum_aux.grupo.equals(grupo_seleccionado)){
//...añadimos al DefaultListModel "modelo" los siguientes atributos de alum_aux
this.modelo.addElement(alum_aux.dni+"/"+alum_aux.nombre+"/"+alum_aux.apellidos);
}
}

//Le pasamos al metodo "representar_alumnos" de la clase VentanaAsignarNotas el DefaultListModel "modelo"
vant.representar_alumnos(this.modelo);
}





Aqui os pongo el método representar_alumnos
Código PHP:
//Metodo de la clase VentanaAsignarNotas
public void representar_alumnos(DefaultListModel model){

//Asignamos al DefaultListModel de la clase VentanaAsignarNotas el modelo de la clase escuchador (GestionBotonAsignarNotas)
this.modelo=model;

//Creamos el JList de la clase VentanaAsignarNotas (es decir, creamos el JList ^^)
this.li_alumnos=new JList();

//Asignamos el DefaultListModel al JList
this.li_alumnos.setModel(this.modelo);

//Añadimos el JList a la ventana
this.add(li_alumnos);

//Posicionamos o colocamos el JList en la ventana
this.li_alumnos.setBounds(100300400350);

//Hacemos el JList visible
this.li_alumnos.setVisible(true);



El problema que me surge es que el JList no es del todo "dinámico" (por decirlo de alguna manera), sino que, por ejemplo, en el JComboBox selecciono una opción, y entonces aparecen los atributos (dni+nombre...) de todos los alumnos que tienen en su atributo "grupo" la cadena de texto de la opcion seleccionada en el JComboBox.

Hasta ahi bien, pero el problema surge si selecciono otra opcion del JComboBox, ya que si hago eso, los alumnos pertenecientes a la primera opcion no desaparecen, sino que se permanecen en el JList debajo de los alumnos de la segunda opcion. Incluso si selecciono 2 veces la misma opción aparecen 2 veces los resultados repetidos en el JList.

Qué puedo hacer para solucionar este problema???
Hay algo que estoy haciendo mal???

Muchísimas gracias por leer este tostón!!

Un saludo.[/PHP]
  #2 (permalink)  
Antiguo 25/05/2010, 20:39
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Cómo refrescar JList en java????

recuerda que el modelo de la lista es quien gestiona los datos, y ese modelo en tu código no remueve ningún elemento, solo agregas elementos a dicho modelo. Por más que crees nuevas instancias de JList el modelo siempre es el mismo, por lo que te recomendaría que borres los datos del modelo antes de insertar cualquier cosa. Antes de:
for (i=0;i<this.bd_usuarios.usuarios.size();i++){..}; ejecuta algo como this.modelo.remove(...)

Saludos
Carlos Cacique
http://carloscacique.blogspot.com
  #3 (permalink)  
Antiguo 26/05/2010, 10:28
 
Fecha de Ingreso: mayo-2010
Mensajes: 32
Antigüedad: 14 años
Puntos: 0
Respuesta: Cómo refrescar JList en java????

Cita:
Iniciado por ccacique Ver Mensaje
recuerda que el modelo de la lista es quien gestiona los datos, y ese modelo en tu código no remueve ningún elemento, solo agregas elementos a dicho modelo. Por más que crees nuevas instancias de JList el modelo siempre es el mismo, por lo que te recomendaría que borres los datos del modelo antes de insertar cualquier cosa. Antes de:
for (i=0;i<this.bd_usuarios.usuarios.size();i++){..}; ejecuta algo como this.modelo.remove(...)

Saludos
Carlos Cacique
http://carloscacique.blogspot.com
Hola de nuevo. El problema que tenia es que this.modelo.clear(); tenia que ponerlo justo al principio de este metodo de la clase GestionBotonAsignarNotas:

//Metodo
public void actionPerformed(ActionEvent e) {
if ("ELEGIR GRUPO".equals(e.getActionCommand())){
this.modelo.clear();
.
.
.
}

Puff, y pensar que me he tirado más de 2 horas con este problema ...

Gracias por la respuesta

Un saludo.

Etiquetas: jlist, refrescar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:10.