Foros del Web » Programación para mayores de 30 ;) » Java »

Quitar row con removeRow y editor celdas

Estas en el tema de Quitar row con removeRow y editor celdas en el foro de Java en Foros del Web. Hola, a ver si alguien me puede ayudar. Tengo un jtable compuesto por 2 columnas. En la 2, hay un botón que al pulsarlo ejecuta ...
  #1 (permalink)  
Antiguo 24/02/2008, 13:51
 
Fecha de Ingreso: marzo-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 0
Quitar row con removeRow y editor celdas

Hola, a ver si alguien me puede ayudar. Tengo un jtable compuesto por 2 columnas. En la 2, hay un botón que al pulsarlo ejecuta la función eliminarCategoria pasandole la fila a eliminar del jtable. El caso es que me da error ArrayIndexOutOfBoundsException. Si no utilizo setCellRenderer y setCellEditor en la tabla, solo manipulando sobre el DefaultTableModel directamente, va bien. Dejo el trace del error y el código por si es de ayuda. Gracias.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Vector.java:435)
at javax.swing.table.DefaultTableModel.setValueAt(Def aultTableModel.java:637)
at javax.swing.JTable.setValueAt(JTable.java:1926)
at javax.swing.JTable.editingStopped(JTable.java:3339 )
at javax.swing.AbstractCellEditor.fireEditingStopped( AbstractCellEditor.java:124)
at gestor.interfaz.ButtonEditor.fireEditingStopped(Bu ttonEditor.java:56)
at gestor.interfaz.ButtonEditor$1.actionPerformed(But tonEditor.java:19)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.jav a:5517)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3135)
at java.awt.Component.processEvent(Component.java:528 2)
at java.awt.Container.processEvent(Container.java:196 6)
at java.awt.Component.dispatchEventImpl(Component.jav a:3984)
at java.awt.Container.dispatchEventImpl(Container.jav a:2024)
at java.awt.Component.dispatchEvent(Component.java:38 19)
at javax.swing.plaf.basic.BasicTableUI$Handler.repost Event(BasicTableUI.java:902)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseR eleased(BasicTableUI.java:1022)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEven tMulticaster.java:232)
at java.awt.Component.processMouseEvent(Component.jav a:5517)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3135)
at java.awt.Component.processEvent(Component.java:528 2)
at java.awt.Container.processEvent(Container.java:196 6)
at java.awt.Component.dispatchEventImpl(Component.jav a:3984)
at java.awt.Container.dispatchEventImpl(Container.jav a:2024)
at java.awt.Component.dispatchEvent(Component.java:38 19)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:3822)
at java.awt.Container.dispatchEventImpl(Container.jav a:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791 )
at java.awt.Component.dispatchEvent(Component.java:38 19)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 463)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)



CODIGO:

public class VentanaCategorias extends JFrame implements ActionListener
{
Vector vFilas = new Vector();
Vector vCabecera = new Vector();
DefaultTableModel dm;
JTable tabla;
JButton bInsertar = new JButton("Insertar");
JTextField tInsertar = new JTextField(10);

public void eliminarCategoria (int fila)
{
CellEditor ce = tabla.getCellEditor();
if (ce!=null)
{
ce.cancelCellEditing();

}
DefaultTableModel dAux = (DefaultTableModel)tabla.getModel();
tabla.editingCanceled(null);

dAux.removeRow(fila); //FALLA!!

dAux.fireTableRowsDeleted(fila+1, fila+1);
}

public VentanaCategorias(Vector vCategorias)
{
super("Gestión categorías");
setLocation(new Point(100, 100));
setSize(200, 150);

JPanel panelCategorias = new JPanel();
panelCategorias.setLayout(new BoxLayout(panelCategorias,
BoxLayout.Y_AXIS));


JPanel panelEdicion = new JPanel();
panelEdicion.setLayout(new BoxLayout(panelEdicion, BoxLayout.Y_AXIS));

vCabecera.add("Categoria");
vCabecera.add("Delete");
dm = new DefaultTableModel(vFilas.size(), vCabecera.size());
dm.setDataVector(vFilas, vCabecera);
tabla = new JTable(dm);

tabla.getColumn("Delete").setCellRenderer(new tablaCategorias());
tabla.getColumn("Delete").setCellEditor(
new ButtonEditor(new JCheckBox(), this));

panelEdicion.add(new JScrollPane(tabla));

panelCategorias.add(panelEdicion);

JPanel panelInsercion = new JPanel();
panelInsercion.setLayout(new FlowLayout());
panelInsercion.add(tInsertar);

bInsertar.addActionListener(this);
panelInsercion.add(bInsertar);

panelCategorias.add(panelInsercion);
add(panelCategorias);
}

public void actionPerformed (ActionEvent e){
String origen = e.getActionCommand();
if (origen.equalsIgnoreCase("insertar"))
{
if (tInsertar.getText().trim().length()>0 || true)
{
System.out.println("Accion ejecutando");

Vector vData = new Vector();
vData.add(tInsertar.getText());
vData.add("");
CellEditor ce = tabla.getCellEditor();
if (ce!=null) ce.cancelCellEditing();
tabla.getColumn("Delete").setCellRenderer(new tablaCategorias());
tabla.getColumn("Delete").setCellEditor(
new ButtonEditor(new JCheckBox(), this));
DefaultTableModel dAux = (DefaultTableModel)tabla.getModel();
dAux.addRow(vData);
dAux.fireTableRowsInserted(dAux.getRowCount(),
dAux.getRowCount());
}
}
}
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:21.