Bouton delete dans une cellule d'unen JTable

empiret Messages postés 38 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 13 mars 2006 - 12 mai 2005 à 11:02
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 - 15 mai 2005 à 11:30
Bonjour,



J'ai une JTable qui contient des lignes. Chaque ligne contient une cellule contenant un bouton 'delete'.

Ce bouton sert a supprimer la ligne qui l'heberge.Le probleme que je rencontre et le suivant:

la ligne se supprime bien sans Exception, sauf si je clique sur le bouton de la DERNIERE ligne.

L'Exception obtenue est ce qui suit. (on a deux lignes dans ma JTable dans cet exemple)



Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

at java.util.Vector.elementAt(Vector.java:432)

at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:637)

at javax.swing.JTable.setValueAt(JTable.java:1875)

at javax.swing.JTable.editingStopped(JTable.java:3333)

at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:124)

at tecan.ButtonDeleteEditor.fireEditingStopped(ButtonDeleteEditor.java:72)

at tecan.ButtonDeleteEditor$1.actionPerformed(ButtonDeleteEditor.java:30)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

....



Qu'est ce que je dois faire ??

Mon code est simple:



TableColumn delColumn = getColumnModel().getColumn(8);

delColumn.setCellRenderer(new ButtonRenderer());

delColumn.setCellEditor(new ButtonDeleteEditor(new JCheckBox()));



et voila ma classe ButtonDeleteEditor :



public class ButtonDeleteEditor extends DefaultCellEditor {

protected JButton button;

private String label = "delete";

private boolean isPushed;

private JTable table;

private int row;



public ButtonDeleteEditor(JCheckBox checkBox) {

super(checkBox);

button = new JButton(label);

button.setOpaque(true);

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

fireEditingStopped();

}

});

}



public Component getTableCellEditorComponent(JTable table, Object value,


boolean isSelected, int row, int column) {

this.table = table;

this.row = row;

if (isSelected) {

button.setForeground(table.getSelectionForeground());

button.setBackground(table.getSelectionBackground());

} else{

button.setForeground(table.getForeground());

button.setBackground(table.getBackground());

}

label (valuenull) ? "" : value.toString();

button.setText( label );

isPushed = true;

return button;

}



public Object getCellEditorValue() {

if (isPushed) {

String message = "You are attempting to delete a step of your distribution. \n"

+ "Please confirm it by
pressing the button OK or
cancel.";

int value =
JOptionPane.showConfirmDialog(null, message, "Order confirmation",
JOptionPane.OK_CANCEL_OPTION);

if (value == JOptionPane.OK_OPTION) {

DefaultTableModel m = (DefaultTableModel)getModel();

m.removeRow(row);

}

}

isPushed = false;

return new String( label ) ;

}



public boolean stopCellEditing() {

isPushed = false;

return super.stopCellEditing();

}



protected void fireEditingStopped() {

super.fireEditingStopped();

}

}



merci d'avance.

1 réponse

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
15 mai 2005 à 11:30
ce message dit clairement qu un acces aux donnee ce fait en dehors des limites ...
je pense que c est le mecanisme de mise a jour de l affichage de la jtable qui cherche la ligne que tu vien d enlever du model pour l afficher... et comme c etait la derniere il n a rien a referencer ;-( dc boom

++

GodConan
0
Rejoignez-nous