/ / java jtable removeRow: java.lang.IndexOutOfBoundsException: Índice: 1, Tamaño: 1 - java, swing, jtable, indexoutofboundsexception, tablemodel

java jtable removeRow: java.lang.IndexOutOfBoundsException: Índice: 1, Tamaño: 1 - java, swing, jtable, indexoutofboundsexception, tablemodel

Estoy eliminando una fila en mi JTable y tengo esta excepción: IndexOutOfBoundsException: Index: 1, Size: 1 ".

Este es mi TableModel Classe:

public Class MyTableModel extends AbstractTableModel {
private static final long serialVersionUID = -912060609250881296L;
private ResultSet rs;
private int rowCount;
private int columnCount;
private ArrayList<Object[]> data=new ArrayList<Object[]>();
private ArrayList<TableModelListener> listeners = new ArrayList<TableModelListener>();

public TableModelMicrosite(ResultSet _rs) throws Exception
{
setRS(_rs);
}

public void setRS(ResultSet _rs)
throws Exception
{
this.rs=_rs;
ResultSetMetaData metaData=_rs.getMetaData();
rowCount=0;
columnCount=metaData.getColumnCount();
while(_rs.next()){
Object[] row=new Object[columnCount];
for(int j=0;j<columnCount;j++){
row[j]=_rs.getObject(j+1);
}
data.add(row);
rowCount++;
}
}
public boolean isCellEditable(int rowIndex, int columnIndex){
return false;
}
public void addTableModelListener(TableModelListener l)
{
if (listeners.contains(l))
return;
listeners.add(l);
}


public void setValueAt(Object value, int rowIndex, int columnIndex)
{
data.get(rowIndex)[columnIndex] = value;

TableModelEvent tabModEvent = new TableModelEvent(this, rowIndex,
rowIndex, columnIndex, TableModelEvent.UPDATE);
for (TableModelListener l: listeners)
l.tableChanged(tabModEvent);
fireTableCellUpdated(rowIndex, columnIndex);
System.out.println("Changed :  " + value);
}

public int getColumnCount(){
return columnCount;
}

public int getRowCount(){
return rowCount;
}

public Object getValueAt(int rowIndex, int columnIndex){
Object[] row=(Object[]) data.get(rowIndex);
System.out.println("rowIndex : "+rowIndex);     System.out.println("columnIndex : "+columnIndex);
return row[columnIndex];
// return data[rowIndex][columnIndex];

}

public String getColumnName(int columnIndex){
try{
ResultSetMetaData metaData=rs.getMetaData();
return metaData.getColumnName(columnIndex+1);
}catch(Exception e){
e.printStackTrace();
return null;
}
}

public void addRow(Object[] row) {
data.add(0, row);
fireTableRowsInserted(0, 0);
}

public void removeRow(int  selectedrow) {
data.remove(selectedrow) ;
fireTableRowsDeleted(selectedrow, selectedrow);
}

}

Y así es como llamo a mi método removeRow () en mi clase principal:

table = new JTable(monDataModel());
int [] row = table.getSelectedRows();
table.clearSelection();

List<Integer> selectedModelRows = new LinkedList<Integer>();
for (int i = 0; i < row.length; i++) {
selectedModelRows.add(table.convertRowIndexToModel(row[i]));
}
Collections.sort(selectedModelRows, Collections.reverseOrder());

for (int selectedModelRow : selectedModelRows) {
((TableModelMicrosite) table.getModel()).removeRow(selectedModelRow);
((TableModelMicrosite) table.getModel()).fireTableRowsDeleted(selectedModelRow, selectedModelRow);
}

Creo que hay un problema con el método getValue () en el TableModel, pero no sé cuál es el error.

Puedes ayudarme por favor ? Muchas gracias !

Respuestas

0 para la respuesta № 1

Esto es lo que estoy intentando, pero sigo siendo la excepción "IndexOutOfBoundsException"

eliminación del vacío públicoRowFromTable ()

{

// myTable = new JTable (myTableModel);

int [] rows = myTable.getSelectedRows ();

para (int i = 0; i <rows.length; i ++) {

int fila = filas [i];

int modelRow = myTable.convertRowIndexToModel (filas);

myTable.getModel (). removeRow (modelRow);

}

Este es mi método de eliminación en el tableModel:

public void removeRow (int selectedrow)

{

data.remove (selectedrow);

fireTableRowsDeleted (selectedrow, selectedrow);

}