java jtable removeRow:java.lang.IndexOutOfBoundsException:索引:1,大小:1 [英] java jtable removeRow : java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

查看:133
本文介绍了java jtable removeRow:java.lang.IndexOutOfBoundsException:索引:1,大小:1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要在JTable中删除一行,并且出现以下异常:IndexOutOfBoundsException:Index:1,Size:1.

I'm removing a row in my JTable and i have this Exception : IndexOutOfBoundsException: Index: 1, Size: 1".

这是我的TableModel类:

This is my 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);   
} 

}

这就是我在主体类中调用removeRow()方法的方式:

And this is how i call my removeRow() method in my principal Class :

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); 
   }

我认为TableModel中的getValue()方法存在问题,但我不知道这是什么错误.

I think there is a issue with the getValue() method in the TableModel, but i don't know what is the mistake.

你能帮我吗?非常感谢 !

Can you help me please ? Thanks a lot !

推荐答案

这是我正在尝试的方法,但是我仍然遇到"IndexOutOfBoundsException"异常

公共无效的RemoveRowFromTable()

public void removingRowFromTable()

{

//myTable =新的JTable(myTableModel);

//myTable = new JTable(myTableModel);

int []行= myTable.getSelectedRows();

int [] rows = myTable.getSelectedRows();

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

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

int row = rows [i];

int row = rows[i];

int modelRow = myTable.convertRowIndexToModel(rows);

int modelRow = myTable.convertRowIndexToModel(rows);

myTable.getModel().removeRow(modelRow);

myTable.getModel().removeRow(modelRow);

}

这是我在tableModel中的删除方法:

public void removeRow(int selectedrow)

public void removeRow(int selectedrow)

{

data.remove(selectedrow);

data.remove(selectedrow) ;

fireTableRowsDeleted(selectedrow,selectedrow);

fireTableRowsDeleted(selectedrow, selectedrow);

}

这篇关于java jtable removeRow:java.lang.IndexOutOfBoundsException:索引:1,大小:1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆