2012-01-05 10 views
6

Quiero crear una JList que contiene las entradas de una tabla hash de la cadena y objeto:¿Cómo puedo crear una JList que contiene entradas de una Hashtable de String y Object?

Hashtable<String,Object> 

el elemento JList debe contener la entrada de tabla hash y mostrar el valor de la clave de entrada que es una cadena ...

¿Es posible? Cómo puede hacerse esto ?

+0

Considere también una implementación de 'Mapa' en lugar de' Hashtable'. – trashgod

+0

No puedo, tengo que usar una tabla hash porque tengo que lidiar con una antigua API. – aleroot

+0

¿Necesita la lista ordenada por clave? – trashgod

Respuesta

5

Implemente la interfaz ListModel extendiendo AbstractListModel. Use el modelo derivado para crear su JList. Consulte también How to Use Lists.

+0

Al codificar en la interfaz 'Mapa', uno tiene más latitud para seleccionar una implementación alternativa, como' SortedMap'. – trashgod

+1

+1 pero ... Esto es más trabajo que @dogbane y mi solución. Sin embargo, si el Hashtable va a cambiar con el tiempo y necesita actualizar dinámicamente el JList, este es el camino a seguir. – user949300

+1

Sí, la JList va a cambiar porque el usuario puede interactuar con ella, así que este es el camino a seguir. Lo pregunté porque esperaba que hubiera menos trabajo por resolver, pero desafortunadamente no. Gracias a todos por la ayuda. Implementaré un HastTable ListModel;). – aleroot

3

Puede implementar la interfaz ListModel para hacer lo que desee. Cree una clase que la implemente y la conserve en su HashMap deseado. Preste especial atención a la implementación del método getElementAt.

5

Use el conjunto de claves de su Hashtable para los datos en su JList:

Hashtable<String, Object> table = new Hashtable<String, Object>(); 
JList list = new JList(table.keySet().toArray()); 

También puede llamar a:

list.setListData(table.keySet().toArray()) 
+1

Me gusta la simplicidad de esta solución. Pero ten en cuenta que el orden de keySet será bastante aleatorio, por lo que el orden de los elementos en la JList no será lo que @aleroot espera. – user949300

5

tabla hash es "viejo", por lo que debe considerar el uso de un HashMap vez .

Puede obtener una Colección de todos los valores en la Hashtable llamando a values ​​(). OOPS: leí mal su pregunta, cambie eso a keySet(). Si está satisfecho con mostrarlos en la Lista J utilizando su método toString() (por ejemplo, son cadenas), simplemente agréguelos a la lista J. Desafortunadamente, los constructores de JList, al menos en J6, no toman colecciones (lo que más me molesta, ¿cuántos años llevan colecciones?), Así que tendrás que trabajar un poco allí.

Una advertencia. Hashtable y HashMap ordenan sus entradas de una manera bastante impredecible. Por lo tanto, el orden de los valores en JList casi seguro no será el orden que desee. Considere usar un LinkedHashMap o un TreeMap para mantener un orden más razonable.

Cuestiones relacionadas