Tengo un modelo derivado de AbstractTableModel, donde mis datos estan en un List:
Codigo Clase ModeloTablaEjemplos
Código Java:
Ver original
private List<Ejemplo> dataEjemplos; // demas metodos .... }
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
private boolean cambios; private List<Ejemplo> listEjemplos; private List<String> listNombParamEntradas; private ModeloTablaEjemplos modelo; @Override modelo = (ModeloTablaEjemplos) tableEjemplos.getModel(); mostrarLista(listEjemplos); mostrarLista(modelo.getDataEjemplos()); if (listEjemplos != modelo.getDataEjemplos()) { btnGuardar.setEnabled(true); } } /** Creates new form FrmEjemplos */ List<String> listNombParam) { super(parent, modal); this.cambios = false; //this.listEjemplos = new ArrayList<Ejemplo>(listEjemplos); this.listNombParamEntradas = new ArrayList<String>(listNombParam); modelo = new ModeloTablaEjemplos(a, new ArrayList<Ejemplo>(listEjemplos)); // En initComponents se establece el modelo para el jTable initComponents(); // cargo el atributo list como un nuevo para que no se realicen cambios en el original this.listEjemplos = new ArrayList<Ejemplo>(listEjemplos.size()); for (Ejemplo ejemplo : listEjemplos) { this.listEjemplos.add(ejemplo); } btnGuardar.setEnabled(false); tableEjemplos.getModel().addTableModelListener(this); } // Variables declaration - do not modify // End of variables declaration initComponents() { tableEjemplos.setModel(modelo); tableEjemplos.setFillsViewportHeight(true); jScrollPane1.setViewportView(tableEjemplos); // demas inicializacion... } private void mostrarLista(List<?> listValores) { } } }
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.