Foros del Web » Programación para mayores de 30 ;) » Java »

Duda JFrame ArrayList

Estas en el tema de Duda JFrame ArrayList en el foro de Java en Foros del Web. Hola con todos. Expongo mi caso para que se entienda el problema. Tengo un modelo derivado de AbstractTableModel, donde mis datos estan en un List: ...
  #1 (permalink)  
Antiguo 04/07/2012, 10:09
 
Fecha de Ingreso: enero-2012
Ubicación: Lima
Mensajes: 8
Antigüedad: 12 años, 9 meses
Puntos: 3
Exclamación Duda JFrame ArrayList

Hola con todos. Expongo mi caso para que se entienda el problema.

Tengo un modelo derivado de AbstractTableModel, donde mis datos estan en un List:

Codigo Clase ModeloTablaEjemplos
Código Java:
Ver original
  1. public class ModeloTablaEjemplos extends AbstractTableModel {
  2.     private String[] columnNames;
  3.     private List<Ejemplo> dataEjemplos;
  4.     // demas metodos ....
  5. }

Este modelo lo uso en un JTable que esta dentro de un JDialog, el cual tiene en sus atributos un list, el jtable y el modelo, en su constructor le paso el list para que el atributo list y el modelo se carguen con esa list. Implemento ademas el tableChanged para "hacer algo" cuando cambien los datos en la tabla.

Codigo Clase FrmEjemplos
Código Java:
Ver original
  1. public class FrmEjemplos extends javax.swing.JDialog
  2.         implements TableModelListener {
  3.  
  4.     private boolean cambios;
  5.     private List<Ejemplo> listEjemplos;
  6.     private List<String> listNombParamEntradas;
  7.     private ModeloTablaEjemplos modelo;
  8.  
  9.     @Override
  10.     public void tableChanged(TableModelEvent e) {
  11.         modelo = (ModeloTablaEjemplos) tableEjemplos.getModel();
  12.  
  13.         System.out.println("LISTA GENERAL");
  14.         mostrarLista(listEjemplos);
  15.         System.out.println("LISTA DE LA TABLA");
  16.         mostrarLista(modelo.getDataEjemplos());
  17.  
  18.         if (listEjemplos != modelo.getDataEjemplos()) {
  19.             btnGuardar.setEnabled(true);
  20.         }
  21.     }
  22.  
  23.     /** Creates new form FrmEjemplos */
  24.     public FrmEjemplos(java.awt.Frame parent, boolean modal, List<Ejemplo> listEjemplos,
  25.             List<String> listNombParam) {
  26.         super(parent, modal);
  27.         this.cambios = false;
  28.         String[] a = new String[listNombParam.size()];
  29.          
  30.         //this.listEjemplos = new ArrayList<Ejemplo>(listEjemplos);
  31.         this.listNombParamEntradas = new ArrayList<String>(listNombParam);
  32.        
  33.         String[] var = (String[]) listNombParam.toArray(a);
  34.         modelo = new ModeloTablaEjemplos(a, new ArrayList<Ejemplo>(listEjemplos));
  35.        
  36.         // En initComponents se establece el modelo para el jTable
  37.         initComponents();
  38.  
  39.         // cargo el atributo list como un nuevo para que no se realicen cambios en el original
  40.         this.listEjemplos = new ArrayList<Ejemplo>(listEjemplos.size());
  41.        
  42.         for (Ejemplo ejemplo : listEjemplos) {
  43.             this.listEjemplos.add(ejemplo);
  44.         }
  45.         btnGuardar.setEnabled(false);
  46.         tableEjemplos.getModel().addTableModelListener(this);
  47.     }
  48.  
  49.     // Variables declaration - do not modify                    
  50.     private javax.swing.JButton btnAgregar;
  51.     private javax.swing.JButton btnEliminar;
  52.     private javax.swing.JButton btnGuardar;
  53.     private javax.swing.JButton btnSalir;
  54.     private javax.swing.JScrollPane jScrollPane1;
  55.     private javax.swing.JToolBar.Separator jSeparator1;
  56.     private javax.swing.JToolBar.Separator jSeparator2;
  57.     private javax.swing.JTable tableEjemplos;
  58.     private javax.swing.JToolBar tbarEjemplos;
  59.     // End of variables declaration  
  60.  
  61.    initComponents() {
  62.         tableEjemplos.setModel(modelo);
  63.         tableEjemplos.setFillsViewportHeight(true);
  64.         jScrollPane1.setViewportView(tableEjemplos);
  65.         // demas inicializacion...
  66.    }
  67.  
  68.     private void mostrarLista(List<?> listValores) {
  69.         for (Object elemento : listValores) {
  70.             System.out.print(elemento + "  ");
  71.         }
  72.         System.out.println("");
  73.     }  
  74. }

Cuando ejecuto el programa, la ventana se ve asi:[URL="https://docs.google.com/file/d/0BxQ3YSLNGYgjODdJc092OEJzazg/edit"]https://docs.google.com/file/d/0BxQ3YSLNGYgjODdJc092OEJzazg/edit[/URL]

Mi problema es el siguiente: Cuando yo cambio un dato en la tabla (en la ejecucion del programa) lo que hace que se vaya al codigo del tableChanged(), se imprime las 2 listas: el listEjemplos del atributo y el dataEjemplos del modelo de la tabla, ¡Pero los 2 tienen los mismos datos!, o sea, el modelo que se actualiza al cambiar el dato en la tabla y, NO SE COMO, pero el atributo del JDialog listEjemplos tambien se actualiza. Lo que quiero es que solo se actualice el modelo y no el atributo global, que el atributo global se quede con sus datos que fueron cargados en el constructor, para que el usuario al presionar el boton GUARDAR recien se grabe el atributo global listEjemplos con los datos del modelo de la tabla en el metodo tableChanged.

Espero su respuesta, ya que es muy importante para mi.

PD: el constructor del dialog recibe el list de un atributo global de la ventana principal del programa.

Etiquetas: jtable, list, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:50.