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

    Raccogliere la modifica ad una cella di una tabella JTable

    Ciao a tutti.
    Ho una tabella (istanza di JTable) che viene visualizzata in un pannello scrollabile (istanza di JScrollPane). Col doppio click su una delle celle delle tabella, è possibile modificare il valore (intero) contenuto nella cella.
    Il punto è: dovendo salvare la modifica apportata all'interno, ho necessità di sapere quale metodo viene richiamato per aggiornare il valore della cella della tabella.

    Qualcuno ha un suggerimento?

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

    Re: Raccogliere la modifica ad una cella di una tabella JTable

    Originariamente inviato da sonoftheland
    Col doppio click su una delle celle delle tabella, è possibile modificare il valore (intero) contenuto nella cella.
    Il punto è: dovendo salvare la modifica apportata all'interno, ho necessità di sapere quale metodo viene richiamato per aggiornare il valore della cella della tabella.
    Qui dovresti chiarire meglio. Hai registrato un MouseListener sulla tabella? E a seguito del doppio click hai ricavato (dal Point) la riga/colonna della cella? E fatto questo vuoi modificarla programmaticamente?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Non ho esplicitamente impostato un MouseListener,
    ma il click all'interno della cella (in cui viene visualizzato il valore dell'intero) e la successiva modifica del valore ivi visualizzato funziona.

    Il codice che uso per costruire la tabella è il seguente:

    codice:
    JTable jTable1 = new javax.swing.JTable();
    
    [ ... calcolo numero righe e numero colonne e 
    popolo la tabella con i valori interi ... ]
    
    jTable1.setModel
                        (
                            new javax.swing.table.DefaultTableModel(
                            props, headers)
                            {
                                Class[] types = new Class []
                                {
                                    java.lang.String.class,
                                    java.lang.String.class,
                                    java.lang.Object.class
                                };
    
                                public Class getColumnClass(int columnIndex)
                                {
                                    return types [columnIndex];
                                }
                            }
                        );
    
    jTable1.setName("Tabella_proprietà");
                        org.jdesktop.application.Application.
                            getInstance(drawgui.DrawGUIApp.class).
                            dgv.addTable(jTable1);
    
    Dove il metodo addTable non fa altro che aggiungere la tabella 
    all'oggetto jScrollPane1:
    
    public void addTable(javax.swing.JTable ms)
        {
            jScrollPane1.setViewportView(ms);
        }
    Questo è quanto. Sto pensando a qualche dichiarazione di un qualche Listener da qualche parte che non riesco a scovare...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    Questo è quanto. Sto pensando a qualche dichiarazione di un qualche Listener da qualche parte che non riesco a scovare...
    I dati della tabella stanno ovviamente nel "model". Quando JTable deve aggiornare il modello (ad esempio quando l'utente ha digitato qualcosa nella cella e poi confermato) semplicemente, ad un certo punto, invoca setValueAt() sul model.

    Il modello (che implementa TableModel) notifica qualunque modifica sul model attraverso il listener TableModelListener. Pertanto se a te interessa "ascoltare" le modifiche sul modello, questo è il listener che devi prendere in considerazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie mille!
    Alla fine sono riuscito a individuare il metodo e l'ho sovrascritto con una mia classe MyJTable, che sovrascrive il metodo in questione per permettere il comportamento che desidero.

    Un saluto,
    SonOftheLand

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sonoftheland
    Alla fine sono riuscito a individuare il metodo e l'ho sovrascritto con una mia classe MyJTable, che sovrascrive il metodo in questione per permettere il comportamento che desidero.
    Hai esteso JTable e fatto l'override di setValueAt()?? Ok. Di fatto questo setValueAt() di JTable invoca poi il setValueAt() del model. Con una piccola particolarità a cui devi prestare attenzione. il setValueAt() di JTable riceve riga/colonna nei termini della "view" ... non del "model".
    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.