Problemas al borrar un elemento de una lista
Saludos compañeros, quiero borrar un elemento de una lista al pulsar un boton, y el codigo del actionlistener que le añado a ese boton es el que os muestro a continuacion, xo no me detecta cuando un elemento esta seleccionado, porque el tamaño de la lista en todo momento lo conoce correctamente. En cambio si selecciono un elemento y lo borro con el boton suprimir (el actionlistener es identico, el codigo es el mismo) lo hace correctamente. Este el actionListener que le pongo al boton (m_pos es un DefaultListModel):
ActionListener borrar_cadena_pos=new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int elem_seleccionados[]=lista_pos.getSelectedIndices();
// aqui es donde creo que no me reconoce los elementos seleccionados
for (int i=lista_pos.getSelectedIndices().length-1; i>=0; i--)
m_pos.removeElementAt(elem_seleccionados[i]);
texto_pos.setText("");
lista_pos.setModel(m_pos);
modif.remove(0);
modif.add(0,new Boolean(true));
boton_borrar_pos.setEnabled(false);
boton_anadir_pos.setEnabled(true);
texto_pos.requestFocus();
if (m_pos.size()==0)
{
comprobar_modelos_vacios(m_pos, m_neg, m_test_pos, m_test_neg, guard, guard_como, boton_guard);
ind.setEnabled(false);
boton_ind.setEnabled(false);
deshabilitar_boton_cross(pruebas_cross);
}
else
{
// guard.setEnabled(false);
// guard_como.setEnabled(false);
// boton_guard.setEnabled(false);
}
}
} ;
Me podeis ayudar por favor, es que me tiene desesperao y no encuentro ninguna solucion. Por favor espero vuestras respuestas, gracias por adelantado.
ActionListener borrar_cadena_pos=new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int elem_seleccionados[]=lista_pos.getSelectedIndices();
// aqui es donde creo que no me reconoce los elementos seleccionados
for (int i=lista_pos.getSelectedIndices().length-1; i>=0; i--)
m_pos.removeElementAt(elem_seleccionados[i]);
texto_pos.setText("");
lista_pos.setModel(m_pos);
modif.remove(0);
modif.add(0,new Boolean(true));
boton_borrar_pos.setEnabled(false);
boton_anadir_pos.setEnabled(true);
texto_pos.requestFocus();
if (m_pos.size()==0)
{
comprobar_modelos_vacios(m_pos, m_neg, m_test_pos, m_test_neg, guard, guard_como, boton_guard);
ind.setEnabled(false);
boton_ind.setEnabled(false);
deshabilitar_boton_cross(pruebas_cross);
}
else
{
// guard.setEnabled(false);
// guard_como.setEnabled(false);
// boton_guard.setEnabled(false);
}
}
} ;
Me podeis ayudar por favor, es que me tiene desesperao y no encuentro ninguna solucion. Por favor espero vuestras respuestas, gracias por adelantado.
Hola:
En el bucle no vuelvas a obtener los elementos seleccionados. Ya tienes el array, úsalo directamente.
Si el modelo es un DefaultListModel y m_pos es dicho modelo, te basta con borrar en él el elemento, no hace falta volver a pasarle el modelo a la lista ni nada parecido.
El código te deberÃa quedar mucho más sencillo, con algo como esto
DefaultListModel m_pos = new DefaultListModel();
JList lista_pos = new JList (m_pos);
y en el actionPerformed
int elem_seleccionados[]=lista_pos.getSelectedIndices();
for (int i=elem_seleccionados.size-1; i>=0; i--)
m_pos.removeElementAt(i);
Esto deberÃa bastar para borrar los elementos seleccionados de la lista. Otro tema son otras cosas que tengas que actualizar por ahi.
Se bueno.
En el bucle no vuelvas a obtener los elementos seleccionados. Ya tienes el array, úsalo directamente.
Si el modelo es un DefaultListModel y m_pos es dicho modelo, te basta con borrar en él el elemento, no hace falta volver a pasarle el modelo a la lista ni nada parecido.
El código te deberÃa quedar mucho más sencillo, con algo como esto
DefaultListModel m_pos = new DefaultListModel();
JList lista_pos = new JList (m_pos);
y en el actionPerformed
int elem_seleccionados[]=lista_pos.getSelectedIndices();
for (int i=elem_seleccionados.size-1; i>=0; i--)
m_pos.removeElementAt(i);
Esto deberÃa bastar para borrar los elementos seleccionados de la lista. Otro tema son otras cosas que tengas que actualizar por ahi.
Se bueno.
Ya lo he solucionado, por si alguien lo lee. El codigo para borrar uno o varios elementos seleccionados de la lista funciona bien, por si alguien lo necesita, el problema estaba en que tenia un focusGained en la lista que hacia que si habia algun elemento seleccionado le quitaba la seleccion, por lo que nunca reconocia ningun elemento seleccionado, y ese focusGained se lo queria poner a un boton para borrar la cadena, en vez de a la lista. Espero que nos pueda ayudar esto a todos. Saludos.