Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Problema cancellazione righe JTable

    Ho il seguente problema : quando con questo metodo provo a cancellare le righe della jtable, mi si solleva un 'eccezione. Tale eccezione non è sollevata dal metodo ma dall' edt. Ma non capisco quale sia il problema.
    codice:
     public void deleteSelectedRows() {        DefaultTableModel m = (DefaultTableModel) jTable2.getModel();
            int[] row = jTable2.getSelectedRows();
            try {
                for (int i = 0; i < row.length ; ++i) {
                    if (jTable2.isRowSelected(row[i])) {
    
    
                        String pk = jTable2.getValueAt(row[i], 0).toString();
                        GestoreClienti.DeleteCustomer(pk);
                        m.removeRow(row[i]);
                        for (int j = i + 1; j < row.length; ++j) {
                            row[j] -= 1;
                        }
                    }
                    }
    
    
                }catch (SQLException ex) {
                        JOptionPane.showMessageDialog(null,ex.getMessage(),
                                "Sql Error",JOptionPane.ERROR_MESSAGE);
            }
            
        }
    Ecco l'eccezione
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 47 >= 0    at java.util.Vector.elementAt(Vector.java:470)
        at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:665)
        at javax.swing.JTable.setValueAt(JTable.java:2740)
        at javax.swing.JTable.editingStopped(JTable.java:4722)
        at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141)
        at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368)
        at javax.swing.DefaultCellEditor.stopCellEditing(DefaultCellEditor.java:233)
        at javax.swing.JTable$GenericEditor.stopCellEditing(JTable.java:5477)
        at javax.swing.JTable.columnMarginChanged(JTable.java:4591)
        at javax.swing.table.DefaultTableColumnModel.fireColumnMarginChanged(DefaultTableColumnModel.java:627)
        at javax.swing.table.DefaultTableColumnModel.propertyChange(DefaultTableColumnModel.java:691)
        at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
        at javax.swing.event.SwingPropertyChangeSupport.firePropertyChange(SwingPropertyChangeSupport.java:92)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
        at javax.swing.table.TableColumn.firePropertyChange(TableColumn.java:278)
        at javax.swing.table.TableColumn.firePropertyChange(TableColumn.java:284)
        at javax.swing.table.TableColumn.setWidth(TableColumn.java:514)
        at javax.swing.JTable$2.setSizeAt(JTable.java:3231)
        at javax.swing.JTable$5.setSizeAt(JTable.java:3321)
        at javax.swing.JTable.adjustSizes(JTable.java:3357)
        at javax.swing.JTable.adjustSizes(JTable.java:3325)
        at javax.swing.JTable.setWidthsFromPreferredWidths(JTable.java:3239)
        at javax.swing.JTable.doLayout(JTable.java:3127)
        at java.awt.Container.validateTree(Container.java:1688)
        at java.awt.Container.validateTree(Container.java:1697)
        at java.awt.Container.validateTree(Container.java:1697)
        at java.awt.Container.validate(Container.java:1623)
        at javax.swing.RepaintManager$2.run(RepaintManager.java:679)
        at javax.swing.RepaintManager$2.run(RepaintManager.java:677)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:676)
        at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1650)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:688)
        at java.awt.EventQueue$3.run(EventQueue.java:686)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    Tale eccezione si ripete o 6 volte consecutive
    Ultima modifica di linux_r; 26-02-2014 a 16:04

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Ma non capisco quale sia il problema.
    codice:
            int[] row = jTable2.getSelectedRows();
    Intuitivamente, se in row hai es. {10, 20}, dopo che hai cancellato la riga a indice 10 ..... quella all'indice 20 potrebbe non esserci più e sicuramente non è più "quella" selezionata.
    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 2014
    Messaggi
    305
    no non ho capito !! io graficamente seleziono le righe da cancellare , premo un tasto e le cancello ok?? il metodo mi ritorna gli indici delle righe selezionate, quando cancello la 10 ad esempio tutte quelle successive nell'array vengono traslate di 1 verso l'alto , ovvero il loro indice viene diminuito di 1! l'eccezione non si verifica nel metodo che funziona, completamente!! L'eccezione si verifica alla fine del metodo ovvero quando esce!! infatti se vedi nel codice dell'eccezione non c'è alcun riferimento al metodo e alla classe in cui tale metodo è definito.
    Se seleziono la 10, la 20 diventa la 19 !! che esiste !
    Il problema sussiste quando cancello tutte le righe insieme! se ne cancello poche alla volta va tutto bene !

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    no non ho capito !!
    La tabella ha es. 20 righe (indici 0...19), ok? L'utente seleziona le righe agli indici 10 e 19 (l'ultima). Tu poi chiedi le righe selezionate e l'array creato è giustamente {10, 19}. Tu cancelli la riga all'indice 10. Le righe successive scalano concettualmente di indice (11->10, .... 19->18). Quindi ora ci sono 19 righe (indici 0...18). Tu poi cerchi di cancellare l'indice 19 ..... non c'è. Bum!

    Oops io: non avevo visto che avevi già considerato questo con row[j] -= 1;
    Sorry. Appena ho più tempo rileggo meglio.
    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 2014
    Messaggi
    305
    si ma nel metodo l'ho prevista questa cosa!! e infatti la risolve!! ti ripeto l'eccezione non viene sollevata dal metodo !! il metodo funziona !! viene sollevata dopo !! quando esce !!
    vedi che c'è un secondo for all'interno del metodo, in cui gli elementi dell'array vengono scalati di -1!
    Partendo dall'elemento successivo a quello cancellato !

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Ho notato una cosa che il problema me lo fa solo con lo shortcut da tastiera ctrl-d , se premo il button nella barra dei menu edit->delete selected row non succede nulla!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Ho risolto !! E' un problema di focus, praticamente ,quando selezionavo le righe l'ultima selezionata aveva il focus, quindi quando usciva dal metodo mi dava errore!! praticamente adesso prima di chiamare il metodo rendo l'oggetto non focusable, dopo di che lo riabilito ! CHe ne pensi?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Ho risolto !! E' un problema di focus, praticamente ,quando selezionavo le righe l'ultima selezionata aveva il focus, quindi quando usciva dal metodo mi dava errore!! praticamente adesso prima di chiamare il metodo rendo l'oggetto non focusable, dopo di che lo riabilito ! CHe ne pensi?
    Chiedo scusa degli interventi ma ergo non è un problema di focus
    E' un problema di editabilita,se rendo tutte le celle non editabili oppure la selezione la faccio sulle celle che gia sono non editabili allora tutto ok. se faccio la selezione ad esempio su una cella della colonna Name, che è editabile allora si solleva l'errore!
    Ultima modifica di linux_r; 26-02-2014 a 19:08

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    ragazzi come posso rendere tutte le celle non editabili solo per un momento ?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    ragazzi come posso rendere tutte le celle non editabili solo per un momento ?
    Precisa/quantifica "solo per un momento", magari indicando lo scenario che vuoi avere o, detto al contrario, evitare.
    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.