2012-04-29 23 views
5

Cuando llamo al JList<String>.getModel() y lo lanzo al DefaultListModel<String> me da esta excepción.JList.getModel() ClassCastException

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel 

El código que arroja:

private JList<String> list = new JList<String>(); 
((DefaultListModel<String>) list.getModel()).addElement(...); 

No hace cada vez sin embargo. La mayoría de las veces funciona perfectamente, pero otras veces arroja esta excepción. No entiendo por qué está sucediendo esto. ¿Hay algo que pueda hacer para evitar que esto suceda?

+1

Para una mejor ayuda antes, publique un [SSCCE] (http://sscce.org/). –

+0

Por lo que vale, pensé que la pregunta era razonable y completa, aunque esto podría deberse a las ediciones de andrew. – ditkin

+1

@ditkin Ni siquiera puedo decir lo que Andrew editó. Pero encontré el problema, estaba llamando al método 'setListData (E [])' cambió el 'ListModel' de la lista. – Stripies

Respuesta

5

No debe suponer que es un DefaultListModel. Use la interfaz ListModel. La JList devuelve una implementación interna de ListModel.

Si necesita acceder al modelo subyacente, debe crearlo, configurarlo en el constructor JList y retenerlo usted mismo.

+0

retenerlo no es necesario! ver la respuesta de nikola despotoski es mucho más eficiente! –

13

Tuve este problema. He encontrado esta sencilla solución:

//----instantiation---- 

    JList mList = new JList(); 
    mList.setModel(new DefaultListModel()); 

    /*---- do whatever you want---- */ 

    //Retain it wherever you want with 
    DefaultListModel model = (DefaultListModel)mList.getModel(); 
+0

Tuve el mismo problema ... Crearlo con un nuevo modelo de lista predeterminado corrige todo. +1 – jessechk

1

Antes JList<String>.getModel(), debe inicializar el objeto JList<String>.setModel(new DefaultModelList())

+1

nada nuevo en comparación con una de las respuestas anteriores, ¿verdad ?-) – kleopatra

7

Si está utilizando NetBeans

  1. Seleccione su JList
  2. En propiedades, haga clic el modelo botón
  3. seleccione el "El código personalizado" opción
  4. Escribir new DefaultListModel()

jList custom code

Cuestiones relacionadas