Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [java] help ... TableModelListener

    ragazzi vi spiego il problema brevemente...

    ho la situazione seguente, realizzo in un unico jframe una lista di jtable ognuna rappresentante una selezione di particolari record di tabelle di un database.
    Ho implementato seguendo i javadoc il metodo per gestire la modifica dei record della jtable,
    tutto va bene quando si ha una solo jtable, io invece mi ritrovo con più jtable ed un solo metodo di gestione degli eventi, come faccio a capire a che jtable l'evento si riferisce ??

    con questo pseudocodice spero di farmi capire...

    codice:
    classe .........  implements TableModelListener
    
    costruttore{
    
      ciclo iterativo sulle tabelle del database{
    
           accesso alla singola tabella , inserimento dati in Vector rows
    
           JTable jtab=new JTable(rows,cols);
            jtab.getModel().addTableModelListener(this);
           aggiungo jtab al jframe
    
       }
    }
    
    public void tableChanged(TableModelEvent e) {
            int row = e.getFirstRow();
            int column = e.getColumn();
            TableModel model = (TableModel)e.getSource();
            String columnName = model.getColumnName(column);
            Object data = model.getValueAt(row, column);
            System.out.println(data);
           // Do something with the data... si potrei ma non sò a quale tabella sia stata fatta la modifica !!!!!!!!!!!!!!!
        }
    l'unica idea che mi viene in mente è quella di utilizzare una colonna della jtable inizializzata con il nome della tabella di origine, ma è troppo pessima come soluzione !!

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

    Re: [java] help ... TableModelListener

    Originariamente inviato da tulkas85
    io invece mi ritrovo con più jtable ed un solo metodo di gestione degli eventi, come faccio a capire a che jtable l'evento si riferisce ??

    si potrei ma non sò a quale tabella sia stata fatta la modifica !!!!!!!!!!!!!!!
    A parte come sapere a quale tabella si riferisce (che tecnicamente, cambiando un po' le cose si può fare), la domanda è: sono model "tuoi", implementati da te? E sono tutti uguali oppure no? E una volta ricevuta notifica di un "cambiamento" nel model ... cosa devi fare di preciso?? Chiarisci prima questi punti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie per la risposta ,

    allora uso i model di default, le informazioni visualizzate sono omogenee tra le varie tabelle,
    l'unica cosa che può distinguere due tabelle è proprio il nome.

    quando avviene una modifica, supponiamo di avere un solo jtable, io grazie al numero di riga, mi vado a prelevare la chiave del record, che non è editabile, quindi sicuramente non è cambiata, una volta saputa questa info, accedo con una SELECT alla tabella nel database e confronto gli altri campi della tupla della tabella nel DB con quelli della JTable, quelli modificati dovranno essere aggiornati nel database.

    tutto facile in teoria, il problema nasce quando ho + jtable che fanno riferiamento a + tabelle del mio DB,
    mi viene in mente una possibile soluzione, dimmi se è attuabile.
    Man mano che genero le jtable nel ciclo mi conservo in un vector le istanze TAble model dei vari jtable creati.... (come si fa ?)
    quando arriva l'evento, confronto iterativamente
    TableModel model = (TableModel)e.getSource();
    con il mio vector, sapendo quindi l'indice , riesco a risolvere probabilmente.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    quando avviene una modifica, supponiamo di avere un solo jtable, io grazie al numero di riga, mi vado a prelevare la chiave del record, che non è editabile, quindi sicuramente non è cambiata, una volta saputa questa info, accedo con una SELECT alla tabella nel database e confronto gli altri campi della tupla della tabella nel DB con quelli della JTable, quelli modificati dovranno essere aggiornati nel database.
    Quindi ogni volta che cambia il valore anche solo in 1 cella, fai addirittura una SELECT e poi una UPDATE .... non è troppo?

    Originariamente inviato da tulkas85
    tutto facile in teoria, il problema nasce quando ho + jtable che fanno riferiamento a + tabelle del mio DB,
    mi viene in mente una possibile soluzione, dimmi se è attuabile.
    Man mano che genero le jtable nel ciclo mi conservo in un vector le istanze TAble model dei vari jtable creati.... (come si fa ?)
    quando arriva l'evento, confronto iterativamente
    TableModel model = (TableModel)e.getSource();
    con il mio vector, sapendo quindi l'indice , riesco a risolvere probabilmente.
    Fattibile ma si può fare (molto) meglio ..... sfruttare gli oggetti!! Che è la soluzione "pulita" nel mondo della OOP.

    Avere oggetti del tuo listener differenti, ognuno con le proprie variabili di istanza che contengono le informazioni sulla tabella (non so di preciso cosa ti serve ... se il nome della tabella sul DB o anche altro).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    Originariamente inviato da andbin
    Quindi ogni volta che cambia il valore anche solo in 1 cella, fai addirittura una SELECT e poi una UPDATE .... non è troppo?

    Fattibile ma si può fare (molto) meglio ..... sfruttare gli oggetti!! Che è la soluzione "pulita" nel mondo della OOP.

    Avere oggetti del tuo listener differenti, ognuno con le proprie variabili di istanza che contengono le informazioni sulla tabella (non so di preciso cosa ti serve ... se il nome della tabella sul DB o anche altro).
    per la prima parte,capisco l'inefficienza, ma è molto semplice da fare come cosa, altrimenti onestamente non saprei come fare, dovrei memorizzare le modifiche da qualche parte, e magari alla chiusura del jframe fare l'update... ma la vedo dura.

    per la seconda parte mi sembra un ottima soluzione. In effetti ancora nn sn entrato molto nell'ottica della OOP

    posso espandere la Jtable come classe, e gli aggiungo un campo con il nome della tabella... ottimo!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    posso espandere la Jtable come classe, e gli aggiungo un campo con il nome della tabella... ottimo!
    No ... non ho detto JTable ... intendevo proprio il listener!!!

    codice:
    class MioListener implements TableModelListener {
        private String nomeTabella;
    
        public MioListener(String nomeTabella) {
            this.nomeTabella = nomeTabella;
        }
    
    .....
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie mille, ci siamo riusciti alla fine

    al prossimo problema, che di sicuro sorgerà!!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.