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

    Jtable, tasti direzionali non vanno più

    Ciao a tutti,
    ho un problema con un programmino che sto facendo; praticamente devo far questo:
    Nella tabella, quando la prima cella dell'ultima riga non è vuota, deve aggiungere in automatico una riga vuota.
    Ora sono riuscito nel mio intento, l'unico inconveniente è che nella Jtable non funzionano più i tasti direzionali per spostarsi.

    Potete aiutarmi? Sarebbe alquanto scomodo tenerla così.

    Qui sotto il codice del KeyPressed sulla jTable:

    codice:
    private void jTableGeneraleKeyPressed(java.awt.event.KeyEvent evt) {                                                  // TODO add your handling code here:
            int n = jTableGenerale.getRowCount();
            String cella = (String) jTableGenerale.getValueAt(jTableGenerale.getRowCount()-1, 3);
            DefaultTableModel model = (DefaultTableModel) jTableGenerale.getModel();
            if (cella.compareTo("") != 0 && cella != null)  
                    model.addRow(new Object[]{});
        }
    Grazie anticipatamente

    PS: Se tolgo l'if per controllare che la cella sia vuota, i tasti tornano a funzionare

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Niciola90 Visualizza il messaggio
    Nella tabella, quando la prima cella dell'ultima riga non è vuota, deve aggiungere in automatico una riga vuota.
    Ci sono sicuramente modi migliori per applicare questa logica. Tra l'altro perché dici "la prima cella dell'ultima riga"? Prendi il valore alla colonna 3 .... non è mica la prima!

    Poi comunque è pure sbagliato

    if (cella.compareTo("") != 0 && cella != null)

    Se cella può essere null, va fatto

    if (cella != null && cella.compareTo("") != 0)

    Non sono la stessa cosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ci sono sicuramente modi migliori per applicare questa logica. Tra l'altro perché dici "la prima cella dell'ultima riga"? Prendi il valore alla colonna 3 .... non è mica la prima!
    Si scusa mi sono espresso male, le prime 3 celle sono boolean per cui non mi interessano, mi interessa la quarta cella

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Poi comunque è pure sbagliato

    if (cella.compareTo("") != 0 && cella != null)

    Se cella può essere null, va fatto

    if (cella != null && cella.compareTo("") != 0)

    Non sono la stessa cosa.
    In che senso è sbagliato? Praticamente, deve inserire una riga qualora la cella 4 dell'ultima riga contiene qualcosa.
    Comunque ho notato che devo usare l'OR e non l'AND; comunque il problema non mi si risolve, le frecce non vanno, o meglio, vanno finche non scrivo niente nella prima riga.

    Comunque che altri metodi migliori ci sono?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Niciola90 Visualizza il messaggio
    In che senso è sbagliato?
    Scusa la domanda ma .... ti è chiara la (importante) differenza tra:

    if (cella.compareTo("") != 0 && cella != null)
    e
    if (cella != null && cella.compareTo("") != 0)

    ?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Sinceramente no, me lo puoi spiegare?
    Cioè nel primo, viene prima fatto il confronto se la cella è vuota e poi se è null.
    Nel secondo il contrario.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Niciola90 Visualizza il messaggio
    Sinceramente no, me lo puoi spiegare?
    Cioè nel primo, viene prima fatto il confronto se la cella è vuota e poi se è null.
    Nel secondo il contrario.
    I due if non sono equivalenti. Il && (come || ) è un operatore con comportamento "short circuit". Se il primo operando è già tale per cui è possibile dedurre il risultato complessivo, allora il secondo operando non viene nemmeno valutato/usato in alcun modo.

    Se vuoi fare "qualcosa" se e solo se cella NON è vuota (che presuppone non null E non stringa vuota "" ), solo il secondo if che ti ho detto io è corretto.

    Con if (cella != null && cella.compareTo("") != 0)
    Se cella è null, la parte dopo && NON viene assolutamente valutata. E questo salva da qualunque NullPointerException.

    Mentre in quella che hai detto tu, viene subito fatto cella.compareTo("") quindi se cella è null ti becchi l'eccezione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ho capito, non lo sapevo, grazie della spiegazione molto chiara.
    Comunque mi sapresti dire come fare per non far bloccare le frecce all'aggiunta di una riga?
    Oppure un metodo migliore di quello a cui ho pensato io.

    Grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Niciola90 Visualizza il messaggio
    Comunque mi sapresti dire come fare per non far bloccare le frecce all'aggiunta di una riga?
    Oppure un metodo migliore di quello a cui ho pensato io.
    Io personalmente proverei a ragionare sul model. Ovvero estendendo nel tuo caso DefaultTableModel e ridefinendo il setValueAt.
    Se il valore settato: a) non è null/vuoto E b) è dell'ultima riga E c) dell'ultima colonna, allora aggiungo una riga nel model.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Grazie,
    ho un solo problema, ho creato la tabella con l'editor di netbeans, per cui non mi fa modificare il codice autogenerato.
    Come posso fare?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Niciola90 Visualizza il messaggio
    ho un solo problema, ho creato la tabella con l'editor di netbeans, per cui non mi fa modificare il codice autogenerato.
    Purtroppo non ti so dire, mi spiace ... uso di norma solo Eclipse, non NetBeans. E comunque, per la mia "cultura" su Java e in particolare su Swing, il mio atteggiamento nei confronti degli editor visuali di GUI è molto semplice: non mi possono interessare di meno ..
    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.