Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    TableModelListener problem

    Ciao a tutti,
    sono tre giorni che impazzisco per fare una jtable editabile...le celle riesco a modificarle ma non capisco il perchè il programma usa la mia InteractiveTableModelListener ma ne usa un altra che non so quale sia...quindi la cella della tabella si edita ma io non riesco a controllare il dato inserito per salvarlo quindi tutto rimane temporaneo. HELP ME




    codice:
    import gestionesicurint.Mymodel.MyModelOperatori;
    import gestionesicurint.Operatori;
    import gestionesicurint.Server.Server;
    import gestionesicurint.Server.Server_OP;
    import gestionesicurint.Stampa;
    import java.util.Vector;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.TableModel;
    
    
    public class TableOperatori extends javax.swing.JFrame {
    
        protected Server_OP server;
        protected Server [] x;
        protected MyModelOperatori dataModel;
        protected MyModelOperatori ciccio;
        protected Vector v;
     
        public TableOperatori(Server [] array) {
            server=(Server_OP)array[0];
            x=array;
            initComponents();
        }
        public void initComponent() {
    
            v= new Vector(server.GetArrayOp().length);
            for(int i=1;i<server.GetArrayOp().length;i++)
            {
              v.add(server.GetArrayOp()[i]);
            }
    
            dataModel = new MyModelOperatori(v);
            dataModel.addTableModelListener (new InteractiveTableModelListener());
            setLocationRelativeTo(null);
        }  
    
        public class InteractiveTableModelListener implements TableModelListener {
             public void tableChanged(TableModelEvent evt) {
                 if (evt.getType() == TableModelEvent.UPDATE) {
                     int column = evt.getColumn();
                     int row = evt.getFirstRow();
                     System.out.println("row: " + row + " column: " + column); //qui dovrebbe stamparmi il mio dato inserito
                     jTable1.getModel().setValueAt(3, row, column);
    
                 }
             }
    
         }
    Questo è il modello che ho usato x editare la mia tabella
    codice:
    package gestionesicurint.Mymodel;
    
    import gestionesicurint.GestioneOperatori;
    import java.util.Vector;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableModel;
    
    public class MyModelOperatori extends AbstractTableModel {
    
        
        String[] ColName = {"Nome","Cognome","Codice Operatore","Data di Nascita","Costo Diurno","Costo Notturno","Costo Festivo"};
        Vector v = null;
        protected TableModel model;
    
        public MyModelOperatori(Vector v)
        {
         this.v=v;
        }
    
        public int getColumnCount(){
            return ColName.length;
        }
        public int getRowCount(){
            return v.size();
        }
        public Object getValueAt(int row,int col){
            GestioneOperatori b = (GestioneOperatori)v.elementAt(row);
              String val = null;
              // la stringa corrispondente alla colonna
              switch (col){
                case 0: val = b.GetArrayDati()[0]; break;
                case 1: val = b.GetArrayDati()[1]; break;
                case 2: val = b.GetArrayDati()[2]; break;
                case 3: val = b.GetArrayDati()[3]; break;
                case 4: val = ""+b.GetArrayCosti()[0]; break;
                case 5: val = ""+b.GetArrayCosti()[1]; break;
                case 6: val = ""+b.GetArrayCosti()[2]; break;
                default: val = "";
                }
                return val;
        }
    
        
    
        public String getColumnName(int columnIndex)
        {
         return ColName[columnIndex];
        }
        
        public boolean isCellEditable(int row,int col){
            return true;
        }
        
    
        public void setValueAt(Object aValue, int aRow, int aColumn) {
            GestioneOperatori b = (GestioneOperatori)v.elementAt(aRow);
              String val = null;
              // la stringa corrispondente alla colonna
              switch (aColumn){
                case 0: b.GetArrayDati()[0]=(String)aValue; break;
                case 1: b.GetArrayDati()[1]=(String)aValue; break;
                case 2: b.GetArrayDati()[2]=(String)aValue; break;
                case 3: b.GetArrayDati()[3]=(String)aValue; break;
                case 4: b.GetArrayCosti()[0]=Double.parseDouble((String)aValue); break;
                case 5: b.GetArrayCosti()[1]=Double.parseDouble((String)aValue); break;
                case 6: b.GetArrayCosti()[2]=Double.parseDouble((String)aValue); break;
                default: val = "";
                }
                v.set(aRow,b);
                
                
        }
    
        public String[] getColumnameArray()
        {
          return ColName;
        }
    
    }


    non so propio dove sbattere la testa non capisco xkè non entra nel mio metodo



    graze
    ---------------------------------------


    (--_--)

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    26
    penso che sia la volta buona per imparare a usare eclipse o netbeans per il debug.
    metti un break point dove pensi che passi e poi vai di f5 e f6

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: TableModelListener problem

    Originariamente inviato da joeluca87
    codice:
        public class InteractiveTableModelListener implements TableModelListener {
             public void tableChanged(TableModelEvent evt) {
                 if (evt.getType() == TableModelEvent.UPDATE) {
                     int column = evt.getColumn();
                     int row = evt.getFirstRow();
                     System.out.println("row: " + row + " column: " + column); //qui dovrebbe stamparmi il mio dato inserito
                     jTable1.getModel().setValueAt(3, row, column);
    
                 }
             }
         }
    Innanzitutto in generale è abbastanza "critico" fare modifiche al modello all'interno del tableChanged che notifica a sua volta che qualcosa è "cambiato". Perché se non lo si fa in modo corretto e sensato, si rischia di andare in "circolo". Questo detto in generale, poi chiaramente dipende da cosa si fa nello specifico.

    Originariamente inviato da joeluca87
    codice:
        public void setValueAt(Object aValue, int aRow, int aColumn) {
            GestioneOperatori b = (GestioneOperatori)v.elementAt(aRow);
              String val = null;
              // la stringa corrispondente alla colonna
              switch (aColumn){
                case 0: b.GetArrayDati()[0]=(String)aValue; break;
                case 1: b.GetArrayDati()[1]=(String)aValue; break;
                case 2: b.GetArrayDati()[2]=(String)aValue; break;
                case 3: b.GetArrayDati()[3]=(String)aValue; break;
                case 4: b.GetArrayCosti()[0]=Double.parseDouble((String)aValue); break;
                case 5: b.GetArrayCosti()[1]=Double.parseDouble((String)aValue); break;
                case 6: b.GetArrayCosti()[2]=Double.parseDouble((String)aValue); break;
                default: val = "";
                }
                v.set(aRow,b);
        }
    Il setValueAt, oltre ad aggiornare la "struttura dati" (qualunque essa sia in base alla implementazione) dovrebbe anche notificare i listener invocando uno dei metodi fireXXX di AbstractTableModel.
    Dal momento che lì si modifica 1 sola cella, si dovrebbe invocare alla fine anche il metodo:

    public void fireTableCellUpdated(int row, int column)

    ereditato da AbstractTableModel. Infatti è questo che consente di far "notificare" ai TableModelListener le modifiche.

    Io ti suggerisco 2 cose:
    1) Andarti a leggere la documentazione ufficiale How to Use Tables
    2) Guardare i miei esempi di table model Java Examples: AWT/Swing – Tables
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.