Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Discussione: Jtable funzione update

  1. #1

    Jtable funzione update

    Rieccomi qua..
    nel codice seguente ho fatto varie prove ma non riesco a farlo funzionare,
    Dovrei aggiornare i dati memorizzati nel database a secondo di quello che c'e scritto nella tabella.
    dai JText ci sono riuscito, riesco ad aggiornare,salvare e a cancellare ma se le variazioni le faccio direttamente sulla JTable non riesco a far in modo che le sriva nel db.
    Riesco ad individuare riga clolonna e valore immesso ma non riesco a catturare l'attimo in cui scrivere il dato nel db.
    ho provato con i vari

    codice:
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;

    In Eclipse no ho trovato nessun Event che potesse fare al mio caso

    niente da fare vi mando un pezzo di codice in dove funzionano i vari Listener..
    come cavolo posso fare a scrivere la variazione??


    codice:
    JScrollPane scrollPane = new JScrollPane();
            scrollPane.setBounds(330, 83, 960, 597);
            contentPane.add(scrollPane);
            
            tableProdotti = new JTable();
    
            tableProdotti.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent arg0) {
                    
    
                    if (arg0.getKeyCode()==KeyEvent.VK_ENTER) {
                        System.out.println("nuovonuovonuovonuovonuovo");
                        int row = tableProdotti.getSelectedRow();
                        int colonna = tableProdotti.getSelectedColumn();
                        
                        String valoreSelezionato = (tableProdotti.getModel().getValueAt(row, colonna).toString());
                        System.out.println("NUOVO VALORE  "+valoreSelezionato);
                    }
                    
                }
            });
            
            
    
            // NON FUNZIONA..//
    
            tableProdotti.getModel().addTableModelListener(new TableModelListener() {
                @Override
                public void tableChanged(TableModelEvent e) {
                   System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"+e);
                   
                }
              });
            
            
            
            
    
            
            
            
            
    
            tableProdotti.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent arg0) {
                    
    
                    
                    clickTabellaDoppio(1);    
                    
                }
                @Override
                public void mousePressed(MouseEvent arg0) {
                    
                    
                    if (arg0.getClickCount() == 2 && !arg0.isConsumed()) {
                        arg0.consume();
                        System.out.println("Double ");
                        clickTabellaDoppio(2);
                    }
                }
            });
    Ultima modifica di LeleFT; 18-05-2018 a 12:10 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    Dovrei aggiornare i dati memorizzati nel database a secondo di quello che c'e scritto nella tabella.
    Le tecniche per salvare su database dalle modifiche su un JTable possono essere davvero svariate. Da quelle più semplicistiche, del tipo: un table model con solo struttura dati in memoria (che non "sa" nulla di JDBC e database) in cui una modifica va a "flaggare" che la riga è stata "modificata". Poi successivamente con l'azione di un pulsante/menù "Salva" si prendono le righe modificate e si scrivono su db, quindi un update su db molto "a valle" della tabella.

    Fino a tecniche più sofisticate come l'uso di un table model che sfrutta un ResultSet che lavora in modalità scrollable e updatable.

    Quindi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Ciao grazie per la risposta
    le tecniche per salvare le modifiche dei valori della JTable su un db con un tasto le ho gia' utilizzate con successo.

    mentre tecniche più sofisticate come l'uso di un table model che sfrutta un ResultSet che lavora in modalità scrollable e updatable
    quelle non le so.. puoi illuminarmi ?

    Cioe' il quello che voglio fare e' doppio click su una cella della JTable, modificare il dato e che questa modifica venga memorizzata sia nella JTable e nel database.
    Salvare il dato nel database lo dovrei saper fare, individuare la cella della JTable dovrei saper fare, il mio problema e' il contenuto della cella che non riesco a fargli l'UPDATE..
    Ultima modifica di antonello2; 18-05-2018 a 18:39

  4. #4
    Niente ragazzi.. non ci riesco
    come facci oa creare un
    Listener abbinato alla mia JTable (tableProdotti) che percepisca il cambiamento di valore di una sua cella ??
    Help me..

  5. #5
    tableProdotti.setModel(DbUtils.resultSetToTableMod el(rs));

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    tableProdotti.setModel(DbUtils.resultSetToTableMod el(rs));
    Si tratta di quello che ho trovato qui? http://technojeeves.com/index.php/22...-to-tablemodel

    Se sì, quel resultSetToTableModel è molto "banale", nel senso che non fa altro che pescare dati (e metadati) dal ResultSet e buttarli nei Vector da passare al DefaultTableModel. Quando il resultSetToTableModel ritorna, hai in mano solo un "normalissimo" DefaultTableModel che ha tutta la struttura dati solo in memoria. Non c'è più alcun aggancio al DB o a quel ResultSet.

    Quindi qualunque logica per aggiornare il DB purtroppo è completamente a tuo carico. E visto che il DefaultTableModel è quello fornito dal resultSetToTableModel ... l'unico modo per "sapere" che una cella è stata modificata è tramite il TableModelListener.
    Ma questo vuol dire: a) capire che tipo di evento viene comunicato, b) determinare quindi la colonna interessata, c) rintracciare la chiave primaria (e attenzione: se la query per il ResultSet iniziale non ha tirato fuori la chiave primaria ... è un bel problema!), d) fare una query di UPDATE.

    Insomma, quel DbUtils.resultSetToTableModel va bene solo se devi principalmente presentare dei dati in forma tabellare e basta.
    Ma se invece devi anche aggiornare il DB .... purtroppo ti dovrai "sporcare" un po' le mani facendo ben altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    ciao grazie per la risposta..so come individuare la cella modificata e so anche andarla a scrivere nel db..
    il problema e' che non so attivare il TableModelListener cioe' se cambia un dato della tabella
    Il dove e' cambiato e il dove lo vado a scrivere credo non sia un problema..

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    il problema e' che non so attivare il TableModelListener cioe' se cambia un dato della tabella
    Innanzitutto implementi TableModelListener e nel tableChanged verifichi che il tipo di evento sia di UPDATE.
    La questione è che UPDATE tecnicamente può descrivere diverse forme di aggiornamento:
    - una singola cella è stata aggiornata.
    - le celle di una colonna X in un range di righe sono state aggiornate.
    - una singola riga è stata aggiornata (ma cosa/dove esattamente NON te lo dice).
    - più righe in un range sono state aggiornate (ma cosa/dove esattamente NON te lo dice).
    - l'intera tabella è stata aggiornata.

    Tutto questo lo scopri dai dati nel TableModelEvent.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    mi puoi fare un piccolo esempio.. cosi' capisco meglio..

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da antonello2 Visualizza il messaggio
    mi puoi fare un piccolo esempio.. cosi' capisco meglio..
    Il caso basilare (che è quello che avviene modificando una cella manualmente):

    codice:
    modello.addTableModelListener(new TableModelListener() {
        @Override
        public void tableChanged(TableModelEvent e) {
            if (e.getType() == TableModelEvent.UPDATE) {
                if (e.getFirstRow() == e.getLastRow() && e.getColumn() >= 0) {
                    int riga = e.getFirstRow();
                    int colonna = e.getColumn();
    
                    // ........
                }
            }
        }
    });
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.