domingo, 1 de diciembre de 2013

Ejemplo JList

Ya en la recta Final de los componentes Java Swing, continuamos con un nuevo ejemplo, en esta ocasión es el turno del JList....

Este está en el grupo de componentes Complejos aunque realmente su uso es muy simple así como la forma de entenderlo....

Que es?

Este componente nos permite presentar una lista de selección donde podemos escoger uno o varios elementos...... este tipo de selección ya la habíamos visto mediante el uso del componente Atómico JComboBox, pero en ese para ver todos los elementos teníamos que desplegar el combo y solo podemos seleccionar de a una opción....

Agregar Elementos...

Voy a mostrar 2 formas de agregar elementos a un JList, la primera mediante un arreglo y la segunda usando la clase DefaultListModel...

Forma 1.

Para agregar elementos usando un arreglo es muy simple, tan solo tenemos que declarar nuestro arreglo y agregarselo al constructor del objeto JList con el que estemos trabajando..... esta forma es muy usada cuando traemos datos directamente de una BD y tenemos que mostrarla en pantalla....
JList listaNombres;
String nombres[] = { "Cristian", "Julian", "Milena"};
listaNombres = new JList( nombres );

Forma 2.

La segunda forma también es muy simple, tenemos que declarar un objeto de tipo DefaultListModel y por medio del método addElement(elemento), vamos agregando elementos a nuestro modelo, posteriormente dicho modelo se agrega al JList con el que trabajemos...... esta forma es muy usada cuando tenemos que agregar y mostrar directamente los datos ingresados en pantalla.
JList listaNombres=new JList();
DefaultListModel modelo = new DefaultListModel();
modelo.addElement("Elemento1");
modelo.addElement("Elemento2");
modelo.addElement("Elemento3");
listaNombres.setModel(modelo);


El Ejemplo.

En el ejemplo usaremos la Forma 2, tan solo presentaremos una ventana con 3 opciones principales, agregar, eliminar y borrar lista, de esta manera evidenciaremos el funcionamiento del JList....


Veamos el código principal asociado a nuestro JList, Inicialmente declaramos nuestra lista, nuestro modelo y un Scroll que contendrá la lista en caso de que se agreguen muchos elementos....
private JList listaNombres;//declaramos La Lista
private DefaultListModel modelo;//declaramos el Modelo
private JScrollPane scrollLista;

Luego instanciamos los componentes, vemos la linea ListSelectionModel.SINGLE_SELECTION, esto nos indica que nuestra lista tan solo permitirá la selección de un único elemento, si quisieramos seleccionar mas de un elemento utilizábamos                     ListSelectionModel.MULTIPLE_INTERVAL_SELECTION.........(esto lo veremos en un proximo ejemplo)....
//instanciamos la lista
listaNombres = new JList();
listaNombres.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );
  
//instanciamos el modelo
modelo = new DefaultListModel();
     
//instanciamos el Scroll que tendra la lista
scrollLista = new JScrollPane();
scrollLista.setBounds(20, 120,220, 80);
scrollLista.setViewportView(listaNombres);

Posteriormente en los eventos de los botones definimos el llamado a los métodos que se encargarán de realizar la incersión de datos al modelo, la eliminación y el borrado, así como la actualización de un mensaje de estado cada vez que se ejecute una acción...
public void actionPerformed(ActionEvent evento) {
 if (evento.getSource()==agregar)
 {
  agregarNombre();
  mensaje.setText("Se agregó un nuevo elemento");
 }
 if (evento.getSource()==eliminar)
 {
  eliminarNombre(listaNombres.getSelectedIndex() );
 }
 if (evento.getSource()==borrar)
 {
  borrarLista();
  mensaje.setText("Se borró toda la lista");
 }
}

Por ultimo se tienen los métodos llamados en el paso anterior..... el llenado se hace mediante la forma 2..... para eliminar un elemento de la lista, como se muestra en el paso anterior, debemos enviar el elemento seleccionado mediante el método getSelectedIndex() que retorna la posición del elemento, contando el primero con un índice 0, este valor es enviado y se usa el método modelo.removeElementAt(indice), para eliminarlo................ para borrar toda la lista, tan solo es necesario borrar el modelo utilizando el método modelo.clear()....
private void agregarNombre() {
 String nombre=campo.getText();
 modelo.addElement(nombre);
 listaNombres.setModel(modelo);
 campo.setText("");
}
 
private void eliminarNombre(int indice) {
 if (indice>=0) {
  modelo.removeElementAt(indice); 
  mensaje.setText("Se eliminó un elemento en la posición "+indice);
  }else{
     JOptionPane.showMessageDialog(null, "Debe seleccionar un indice"
     ,"Error", JOptionPane.ERROR_MESSAGE);
   
     mensaje.setText("NO se seleccionó ningún elemento");
     }
  }
 
private void borrarLista() {
  modelo.clear();
}

Y Listo!!! De esa manera vemos rápidamente un ejemplo simple utilizando el componente JList, usamos sus métodos básicos para tener una aplicacion en funcionamiento y el proceso no presenta mayores complicaciones....

Descarga!!!

Les dejo el enlace de descarga por si lo quieren revisar ;).....si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el.... recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)


También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir y
 Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

31 comentarios:

  1. Hola, yo estoy realizando una aplicación, en la que ingreso clientes a un supermercado y a sus cajas, por lo que es bastante dinámico el manejo de los jList y lo actualizo en un determinado tiempo, el tema es que debes en cuando me salta el IndexOfBoundException, se que es porque seguro que cuando quiero leer los clientes que estan comprando, justo se van a la caja o alguna cosa, el tema es la sincronización para que no me tire ese error
    Alguna sugerencia de como realizar la actualización de datos sin que tire esa excepción???

    ResponderEliminar
    Respuestas
    1. Hola, que pena la demora, debes encontrar una manera de mantener actualizada la lista con la que trabajas, antes de usarla deberias poder consultar los usuarios para evitar que te salgas del indice que es.....talvez podrias usar el patron observer, depronto te puede servir....
      http://codejavu.blogspot.com/2013/06/ejemplo-patron-observer.html

      Eliminar
  2. Muy bueno, me sirvio bastante, gracias :D

    ResponderEliminar
  3. excelente aportación

    ResponderEliminar
  4. Gracias por el aporte y tu tiempo!!

    ResponderEliminar
  5. Muy bueno, pero el enlace al código completo ya no funciona, si pudieras ponerlo de nuevo

    ResponderEliminar
  6. Me sirvió muchisimo. Muchas gracias! Además por fin pude entender lo del scroll como yapa a lo que buscaba.

    ResponderEliminar
  7. Amigo, no permite descargarlo, ahí alguna otra forma de que me los pases

    ResponderEliminar
  8. Muchas gracias amigo me Sirvió bastante e solucionado muchos problemas y que Dios te vendiga y te de mas conocimiento para ayudar a otras personas que lo nesecites
    me sirvió el JOptionPane.showMessageDialog

    ResponderEliminar
  9. Excelente muy util! gracias

    ResponderEliminar
  10. i si quiero solo ingresar 10 datos como hago

    ResponderEliminar
  11. Esta pagina es genial , tu siempre haciendo buenos aportes a la enseñana de java !!

    ResponderEliminar
  12. ahh esta bueno, ahora también he investigado y a mi lista le cambie el color y el fondo.

    ResponderEliminar
    Respuestas
    1. Felicidades, la banda pa cuando?

      Eliminar
  13. no se si tenes algun enlace para alguien que esta empesando en java...y quisiera saber sobre listas y listas con modulos pero solo en consola
    te agradeceria mucho....

    ResponderEliminar
  14. Yo lo hago en visual, y cuando pego el código de la forma 1 en el método ActionPerformed de mi botón:

    JList jList1;
    String nombres[] = {"Cristian", "Julian", "Milena"};
    jList1 = new JList(nombres);

    Y ejecuto no pasa nada, creo que solo agrega pero no muestra, ¿qué hago?

    ResponderEliminar
  15. como valido que si ingreso exactamente el mismo nombre me mande un mensaje diciendo que ya existe... Gracias por la atención

    ResponderEliminar
    Respuestas
    1. Hola, puedes usar una estructura HashSet que no permite almacenar duplicados, o recorrer una lista con un for e ir comparando....

      Eliminar
  16. hay alguien por aqui :( URG :( quiero VALIDAR LISTASSS :(

    ResponderEliminar
  17. no puedo descargar el codigo de mega :( y copiarlo no me funcionaaaa .. que dificil esta vida XD

    ResponderEliminar
  18. me gustaria saber como combinar dos jlist una donde me muestre un listado de secciones y que a la hora de seleccionar una en esa en el otro jlist me muestre los items que contiene esa seccion seleccinada en el primer jlist

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!