Tengo una columna en la JTable que tiene JCheckBox inicializado a false, necesito recoger el evento (cuando un usuario hace click y la pone como true), la cuestion es que no se donde se recoge el evento... Alguien me puede especificar en que metodo se recoge el cambio de la celda?? Una vez recoja el evento necesito saber en que fila de la JTable se ha realizado para asi poder proceder a eliminar dicho elemento....
Bueno al final he optado por extender JCheckBox e implementar TableCellEditor:
Código
package gui; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.EventObject; import java.util.LinkedList; import javax.swing.JCheckBox; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.table.TableCellEditor; /** * * @author Gasuco */ /** * Constructor por defecto. */ public TableEditor() { // Se le ponen las opciones al JCheckBox // Nos apuntamos a cuando se seleccione algo, para avisar a la tabla // de que hemos cambiado el dato. { editado(true); } }); // Nos apuntamos a la pérdida de foco, que quiere decir que se ha // dejado de editar la celda, sin aceptar ninguna opción. Avisamos // a la tabla de la cancelación de la edición. { editado (false); } }); } /** Adds a listener to the list that's notified when the editor * stops, or cancels editing. * * @param l the CellEditorListener * */ // Se añade el suscriptor a la lista. suscriptores.add (l); } /** Tells the editor to cancel editing and not accept any partially * edited value. * */ public void cancelCellEditing() { // No hay que hacer nada especial. } /** Returns the value contained in the editor. * @return the value contained in the editor * */ // Se obtiene la opción del JCheckBox elegida y se devuelve un // Booleano adecuado. if (this.isSelected()) { aux=true; } else{ aux=false; } return aux; } /** Sets an initial <code>value</code> for the editor. This will cause * the editor to <code>stopEditing</code> and lose any partially * edited value if the editor is editing when this method is called. <p> * * Returns the component that should be added to the client's * <code>Component</code> hierarchy. Once installed in the client's * hierarchy this component will then be able to draw and receive * user input. * * @param table the <code>JTable</code> that is asking the * editor to edit; can be <code>null</code> * @param value the value of the cell to be edited; it is * up to the specific editor to interpret * and draw the value. For example, if value is * the string "true", it could be rendered as a * string or it could be rendered as a check * box that is checked. <code>null</code> * is a valid value * @param isSelected true if the cell is to be rendered with * highlighting * @param row the row of the cell being edited * @param column the column of the cell being edited * @return the component for editing * */ boolean isSelected, int row, int column) { // Devolvemos el JCheckBox del que heredamos. return this; } /** Asks the editor if it can start editing using <code>anEvent</code>. * <code>anEvent</code> is in the invoking component coordinate system. * The editor can not assume the Component returned by * <code>getCellEditorComponent</code> is installed. This method * is intended for the use of client to avoid the cost of setting up * and installing the editor component if editing is not possible. * If editing can be started this method returns true. * * @param anEvent the event the editor should use to consider * whether to begin editing or not * @return true if editing can be started * @see #shouldSelectCell * */ // La celda es editable ante cualquier evento. return true; } /** Removes a listener from the list that's notified * * @param l the CellEditorListener * */ // Se elimina el suscriptor. suscriptores.remove(l); } /** Returns true if the editing cell should be selected, false otherwise. * Typically, the return value is true, because is most cases the editing * cell should be selected. However, it is useful to return false to * keep the selection from changing for some types of edits. * eg. A table that contains a column of check boxes, the user might * want to be able to change those checkboxes without altering the * selection. (See Netscape Communicator for just such an example) * Of course, it is up to the client of the editor to use the return * value, but it doesn't need to if it doesn't want to. * * @param anEvent the event the editor should use to start * editing * @return true if the editor would like the editing cell to be selected; * otherwise returns false * @see #isCellEditable * */ // Indica si al editar la celda, debemos seleccionar la fila que la // contiene. return true; } /** Tells the editor to stop editing and accept any partially edited * value as the value of the editor. The editor returns false if * editing was not stopped; this is useful for editors that validate * and can not accept invalid entries. * * @return true if editing was stopped; false otherwise * */ public boolean stopCellEditing() { // Indica si se puede detener la edición. return true; } /** * Si cambiado es true, se avisa a los suscriptores de que se ha terminado * la edición. Si es false, se avisa de que se ha cancelado la edición. */ protected void editado(boolean cambiado) { int i; for (i=0; i<suscriptores.size(); i++) { if (cambiado) aux.editingStopped(evento); else aux.editingCanceled(evento); } } /** Lista de suscriptores */