Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Aggiornare campo JTextField

    Ciao a tutti,

    ho questa Jtable con un listener. A questa, associo un contatore che verrà incrementato di uno ogni volta che viene inserito un nuovo dato in una cella. Questo contatore, però, vorrei che venga mostrato in una JTextField posizionato in basso alla JTable, ma riesco a far visualizzare solo il valore di default (cioè 0). Come faccio a far aggiornare la JTextField ogni volta che il contatore viene incrementato? Vi posto il codice:

    Codice PHP:
    private int quantita 0//il contatore


        //metodo tabella
        
    public ProvaTabella2 () {

            
    //imposto il gestore di layout del frame
            
    super ("Vendita");
            
    setLayout (new FlowLayout() );
            
            
    DefaultTableModel data = new DefaultTableModel();

            
    data.addColumn("Codice");
            
    data.addColumn("Descrizione");
            
    data.addColumn("Q.tà");
            
    data.addColumn("Prezzo unitario");
            
    data.addColumn("Totale");
            
            
    data.setRowCount(10);

            final 
    JTable table = new JTable(data);

            
    data.addTableModelListener(new TableModelListener() {
                
                public 
    void tableChanged(TableModelEvent e) {
                    if(
    e.getType() == TableModelEvent.UPDATE) {
                        
    TableModel source = (TableModel)e.getSource();
                        
    int row e.getFirstRow();
                        
    int col e.getColumn();
                        
    Object value source.getValueAt(rowcol);
                        
    quantita++;
                        
    JOptionPane.showMessageDialog(tablequantita);
                        
                    }
                }
            }
            );

             
    add(table);
            
                  
            
    campoQuantita = new JTextField(20);
            
    campoQuantita.setEditable(false);
            
    campoQuantita.setText(getQuantita() ); //il metodo getQuantita trasforma l'intero in stringa
            
    add(campoQuantita); 

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

    Re: Aggiornare campo JTextField

    Originariamente inviato da grifis78
    Come faccio a far aggiornare la JTextField ogni volta che il contatore viene incrementato?
    Proprio esattamente dove fai l'incremento del contatore puoi settare il testo del text field.

    codice:
    quantita++;
    campoQuantita.setText(Integer.toString(quantita));
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Azzarola, era semplicissimo... Grazie andbin!

    Però, lasciatemi il 3d aperto perchè adesso devo provare a modificare il tutto per fare in modo che il contatore suddetto si aggiorni soltanto una volta che viene riempita una cella corrispondente alla colonna "Quantità" sommando i diversi valori ivi inseriti.... E già so che avrò di nuovo bisogno di aiuto....

    Grazie ancora!

  4. #4
    Come volevasi dimostrare i guai non sono terminati.......

    Allora, al listener ho aggiunto la chiamata ad un metodo che mi permette di fare una query al database MySQL passandogli il valore "value" che contiene ciò che è stato inserito in una cella della JTable. La query funziona perfettamente ed il metodo mi ritorna (in formato stringa) il record desiderato. Adesso, però, vorrei far visualizzare questo record nella cella successiva a dove ho inserito il dato (cioè, se nella colonna "codice" ho inserito "1", nella cella accanto a destra mi dovrà comparire il valore passato dal metodo getCellaDatabase).

    Codice PHP:
    data.addTableModelListener(new TableModelListener() {
                
                public 
    void tableChanged(TableModelEvent e) {
                    if(
    e.getType() == TableModelEvent.UPDATE) {
                        
    TableModel source = (TableModel)e.getSource();
                        
    int row e.getFirstRow();
                        
    int col e.getColumn();
                        
    Object value source.getValueAt(rowcol);

                        
    String cellaRicevuta getCellaDatabase(value);

                        
    //????????????? Qui dovrei fare l'update della cella successiva....

                        
    quantita++;
                        
    campoQuantita.setText(Integer.toString(quantita));
                        

                    }
    //fine di if
                
    }//fine della inner class
            
    }//fine del metodo addTableModelListener
            
    ); 
    Ho provato con alcuni metodi tipo "setValueAt" ma il compilatore mi ritorna una sfilza tale di errori che non vale la pena di elencare... Fra l'altro, oltre a visualizzare il risultato della query, devo poi spostare in automatico il focus alla terza cella..

    Chi mi aiuta di nuovo?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da grifis78
    Ho provato con alcuni metodi tipo "setValueAt" ma il compilatore mi ritorna una sfilza tale di errori che non vale la pena di elencare...
    Hai usato un DefaultTableModel, quindi per lui le celle sono degli Object. Pertanto un setValueAt dovrebbe funzionare.

    Comunque se ho capito, lo scenario è: da codice o dall'utente viene cambiata una cella e vuoi che in automatico venga "aggiornato" un valore in una o più celle su quella riga, ovviamente per tenere coerenti le informazioni?

    Questo andrebbe fatto con un apposito table model. Che sarebbe la soluzione più elegante, pulita e solida. Prova a vedere tra i miei Java Examples (vedi firma), sezione AWT/Swing - Tables l'esempio CartTableDemo.java che è più o meno una tabella di prodotti come la tua.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    grazie andbin, sempre utilissimo!

    Nel frattempo che do un'occhiata ai tuoi esempi, pensavo che, in effetti, una JTable è un contenitore.. Se associo il tutto ad un array e poi uso un qualche metodo del tipo "fireTableCellUpdated", potrebbe funzionare?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da grifis78
    Nel frattempo che do un'occhiata ai tuoi esempi, pensavo che, in effetti, una JTable è un contenitore.. Se associo il tutto ad un array e poi uso un qualche metodo del tipo "fireTableCellUpdated", potrebbe funzionare?
    No, ripeto, basati di più su un "tuo" table model. Visto che quelli che hai sono "record" di informazioni dove ci sono magari campi che dipendono da altri.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Scusami andbin, purtoppo, come puoi facilmente leggere, sono proprio alle prime armi...

    In ogni caso, un setValueAt funziona ma solo se non lo metto all'interno del listener. In questo caso crasha tutto... Ma dove dovrei posizionarlo altrimenti?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da grifis78
    In questo caso crasha tutto...
    Ah sì giusto. Per un motivo anche intuibile. tableChanged = qualcosa è cambiato. Nell'evento cambi tu altro ... che scatena un altro evento .....

    Tecnicamente sarebbe evitabile il loop se facessi gli opportuni test per verificare cosa è cambiato (in modo che se anche scatena un altro evento dovuto al setValueAt lo ignori).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Andbin, nel ringraziarti sempre per la disponibilità, ti annuncio che non ci sto proprio capendo una mazza....

    Se puoi darmi un aiuto più specifico te ne sarei grato a vita...

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.