Bonjour,
Voila j'ai une Jframe ou j'ai un jTable que j'alimente avec un defaulttablemodel.Seulement quand il s'agit d'ajout ca marche, mais quand je selectionne une ligne et je la supprime j'ai l'erreur suivante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Exception in thread "AWT-EventQueue-0" java.lang.Error: java.lang.reflect.InvocationTargetException
        at org.jdesktop.application.ApplicationAction.actionFailed(ApplicationAction.java:859)
        at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:665)
        at org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6289)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6054)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4652)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
        at java.awt.EventQueue$2.run(EventQueue.java:617)
        at java.awt.EventQueue$2.run(EventQueue.java:615)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:662)
        ... 37 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
        at java.util.Vector.elementAt(Vector.java:430)
        at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
        at javax.swing.JTable.getValueAt(JTable.java:2686)
        at ui.FenAnnuaire$1.valueChanged(FenAnnuaire.java:74)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
        at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
        at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:660)
        at javax.swing.JTable.tableRowsDeleted(JTable.java:4497)
        at javax.swing.JTable.tableChanged(JTable.java:4400)
        at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
        at javax.swing.table.AbstractTableModel.fireTableRowsDeleted(AbstractTableModel.java:245)
        at javax.swing.table.DefaultTableModel.setNumRows(DefaultTableModel.java:304)
        at javax.swing.table.DefaultTableModel.setRowCount(DefaultTableModel.java:322)
        at ui.FenAnnuaire.doit(FenAnnuaire.java:337)
        at ui.FenAnnuaire.suppression(FenAnnuaire.java:538)
        ... 42 more
le code de ma fenetre

voila le code associé au boutton supprimer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void suppression() {
 
        System.out.println("Coucou");
        Connection dbConnect = JDBCDriverInformation.getMSSJDBCConnection("BDD", "CLIENT", "sa", "sql");
        String SQL = "delete from annuaires where ANNUAIRE_ID=" + idASupprimer;
        try {
            java.sql.Statement dbStatement = dbConnect.createStatement();
 
            int delete = dbStatement.executeUpdate(SQL);
            dbStatement.close();
            dbConnect.close();
            if (delete == 1) {
 
                JOptionPane.showMessageDialog(this, "Suppression aves succès", "Succès", JOptionPane.ERROR_MESSAGE);
 
 
            } else {
                JOptionPane.showMessageDialog(this, "Erreur de suppression", "Erreur de Suppression", JOptionPane.ERROR_MESSAGE);
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "Erreur de suppression", "Erreur de Suppression", JOptionPane.ERROR_MESSAGE);
        }
        try {
 
            doit();
        } catch (SQLException ex) {
            Logger.getLogger(FenAnnuaire.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
voila le code que j'appele si la suppresion s'est bien effectué

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void doit() throws SQLException {
        model.setRowCount(0);
        Connection dbConnect = null;
        dbConnect = JDBCDriverInformation.getMSSJDBCConnection("BDD", "CLIENT", "sa", "sql");
        System.out.println("jes suis dans Selection Cient : " + FenConnexionBase.isConnected);
        String SQL = "SELECT * FROM ANNUAIRES";
        java.sql.Statement dbStatement = dbConnect.createStatement();
        ResultSet res = dbStatement.executeQuery(SQL);
       while (res.next()) {
 
            model.addRow(new Object[]{
                        res.getInt(1),//
                        res.getString("LIBELLE_ANNUAIRE"),//
                        res.getDate("DATE_DEBUT_VALIDITE").toString(),
                        res.getDate("DATE_FIN_VALIDITE").toString(),});
        }
        res.close();
        dbConnect.close();
        jTable3.setModel(model);
 
    }
le code du listener
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
        jTable3.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
 
                    public void valueChanged(ListSelectionEvent e) {
                        // firePropertyChange("recordSelected", !isRecordSelected(), isRecordSelected());
                        idASupprimer = jTable3.getValueAt(jTable3.getSelectedRow(), 0).toString();
                    }
                });