Yo uso ambos JList y Jtree en diferentes lugares. El contenido de ambos cambian de forma dinámica.

Una vez que un comboBox se crea, no se puede simplemente decir comboBox.setModel(String[]), usted tiene que crear un modelo nuevo y, a continuación, establecer el comboBox.

Mismo sucede con el JList.

Lugar de crear mi propio Jlist y ComboBox sólo para agregar un nuevo método llamado .setNewModel(String[]) he creado un método estático en mi «utilidad» de la clase que recibe un String[] y devuelve un ListModel.

Para que yo pueda hacer esto:

someComboBox.setModel((ComboBoxModel)UtilityClass.convetToListModel(aStringArray));

Yo uso el mismo para el JList.

someList.setModel(UtilityClass.convetToListModel(anotherStringArray));

mi pregunta es:

Podría el casting de la listModel como un ComboBoxModel tiene algunas consecuencias inesperadas?
Si es así, ¿hay alguna forma de cambiar todo el contenido de un control comboBox sin tener que transformar el ArrayString en un Modelo?

aquí está el código del método:

public static ListModel convertToListModel(String[] nList)
{
    return (new JComboBox(nList).getModel());
}

El programa se compila y se ejecuta bien, pero casting siempre genera dudas en mí, especialmente de objetos complejos.
Sí, yo sé que se puede extender Jtree y JList para agregar un método que hace el trabajo, pero su gran cantidad de trabajo adicional. ¿Por qué el ComboBox y Jlist no tiene una actualización o modificar el Modelo de aceptar una simple matriz de Cadenas?

InformationsquelleAutor rciafardone | 2011-05-06

3 Comentarios

  1. 5

    Cómo es

    someComboBox.setModel((ComboBoxModel)UtilityClass.convetToListModel(aStringArray));

    de alguna manera más fácil de escribir/simple/lo que sea que

    someComboBox.setModel(new DefaultComboBoxModel(aStringArray))

    todo incluido es el ruido blanco en el formulario de la Utilidad del método. Además de

    • la implementación de ese método es simplemente … loco: crear un Jtree por el mero hecho de acceder al modelo que se ha creado de forma interna por ese combo …
    • tienes que aprovechar la aplicación para el tipo de fundición para el uso en un verdadero combo …

    No hacer tal derroche/material innecesario, ni siquiera pensar en ir desvíos cuando hay una simple manera de llegar a la misma meta

    • +1 para mantener las cosas simples y no reinventar la rueda.
    • Gracias. Estoy Totalmente de pasar por alto este defaultComboBoxModel. El primero que probé fue casi exactamente eso, pero con ComboBoxModel, ha obtenido un error que era abstracta e hizo todo lo que (ahora) loco solución. Limpiar el código ahora.
  2. 3

    Si el contenido de la lista/combobox necesidad de cambiar de forma dinámica, entonces usted debe administrar el modelo en sí directamente. Usted no debe crear un modelo nuevo cada vez y reemplazar a la antigua. El punto entero de un modelo es que puede actualizar los datos que contiene.

    Simplemente crear su propio DefaultListModel o DefaultComboBoxModel y pasar en el JList/Jtree. A continuación, utilice el modelo de añadir/eliminar métodos necesarios para actualizar los contenidos cuando lo cambia.

    private DefaultComboBoxModel model = new DefaultComboBoxModel();
    private JComboBox combo = new JComboBox(model);
    ...
    
    model.addElement(somethingForMyList);
    ...
    model.removeAllElements();
    ...
    model.removeElement(elementToRemove);
    • Gracias, pero eso significaría que la adición de un elemento en un tiempo utilizando un bucle para leer la matriz, la bruja no quería hacer. Es por eso que he publicado la pregunta, sabía que de una manera más fácil, tenía que existir, pero no el derecho de búsqueda. De nuevo gracias.
    • Es muy extraño como cuando se establece el modelo, que es una instancia de DefaultComboBoxModel, pero al hacerlo combo.getModel(), es una instancia de ComboBoxModel y no se le puede addElement(e). Supongo que está protegido el derecho?
  3. 0

    Generalmente prefiero a implementar una nueva clase que hereda de DefaultComboBoxModel (por lo tanto es también un ListModel así como un ComboBoxModel). Esta nueva clase sería enriquecido con métodos para actualizar el modelo como cualquier posible situación de las demandas. En la actualización de los métodos que usted llamaría fireContentsChanged decir que los envuelve componente que los contenidos han cambiado y el componente debe redibujar todo.

    Espero que ayude.

    • Que sería una exageración y es exactamente lo que yo quería evitar, ya que no se necesita ninguna funcionalidad extra, todos mis problemas se dirigió a la falta de una vía directa para establecer mi arrayString en el modelo en un solo paso. defaultComboBoxModel lo resuelve. La ignorancia me la coma.

Dejar respuesta

Please enter your comment!
Please enter your name here