Java 向抽象JTable模型添加行

Java 向抽象JTable模型添加行,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我试图在我的JTable中添加一行,我使用的是一个抽象方法,如下所示。我目前正在将列表中的数据提取到JTable的SetValues。有人知道如何在不更改列名和数据类型的情况下向其中添加行吗?使用名为addRows的方法,即。我环顾四周,但没有其他问题解决了我的问题 class MyTableModel extends AbstractTableModel { public String[] columnNames = {"A","B","C","D","E"}; public

我试图在我的JTable中添加一行,我使用的是一个抽象方法,如下所示。我目前正在将列表中的数据提取到JTable的SetValues。有人知道如何在不更改列名和数据类型的情况下向其中添加行吗?使用名为addRows的方法,即。我环顾四周,但没有其他问题解决了我的问题

class MyTableModel extends AbstractTableModel {

    public String[] columnNames = {"A","B","C","D","E"};
    public Object[][] data = {
    {"Kathy", "Smith",
     "Snowboarding", new Integer(5), new Boolean(false)},
    {"John", "Doe",
     "Rowing", new Integer(3), new Boolean(true)},
    {"Sue", "Black",
     "Knitting", new Integer(2), new Boolean(false)},
    {"Jane", "White",
     "Speed reading", new Integer(20), new Boolean(true)},
    {"Joe", "Brown",
     "Pool", new Integer(10), new Boolean(false)}
    };

    public void removeRow(int row)
    {
        Object [][]newData=new Object[data.length+1][data[0].length];
        for(int i=0;i<newData.length;i++){
            for(int j=0;j<data[0].length;j++){
                newData[i][j]=data[i+1][j];
            }
        }
        data=new Object[newData.length][columnNames.length];
        data=newData;
        fireTableRowsDeleted(row, row);
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        return col > 2;
    }

    public void setValueAt(Object value, int row, int col) { 
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }        
}
类MyTableModel扩展了AbstractTableModel{ 公共字符串[]columnNames={“A”、“B”、“C”、“D”、“E”}; 公共对象[][]数据={ {“凯西”,“史密斯”, “滑雪板”,新整数(5),新布尔值(假)}, {“约翰”,“多伊”, “划船”,新整数(3),新布尔值(真)}, {“苏”,“黑”, “编织”,新整数(2),新布尔值(假)}, {“简”、“白”, “快速读取”,新整数(20),新布尔值(真)}, {“乔”,“布朗”, “Pool”、新整数(10)、新布尔值(false)} }; 公共无效清除器OW(int行) { 对象[][]新数据=新对象[data.length+1][data[0.length];
对于(int i=0;i,以下方法在末尾添加一行:

    public void addRow(Object[] newRow) {
        data = Arrays.copyOf(data, data.length+1);
        data[data.length-1] = newRow;
        fireTableRowsInserted(data.length-1, data.length-1);
    }
像这样使用它:

    model.addRow(new Object[]{"Kathy", "Smith",
                    "Snowboarding", new Integer(5), new Boolean(false)}
    );

让MyTableModel扩展DefaultTableModel并使用现有的方法,而不是重新发明轮子。但是我需要能够更改模型中的数据,并且被告知AbstractTableModel会更容易,我已经实现了removeRow…我只需要AddRow你的removeRow不正确。删除后新数据的大小更大。哦,是的h、 。我需要做些什么才能使它工作?使用现有的DefaultTreeModelI一定对我的removeRow做了一些错误,我试图修复它,但不起作用。你知道如何修复我的removeRow方法吗?这应该可以工作:public void removeRow(int row){System.arraycopy(数据,行+1,数据,行,数据。长度-row-1);data=Arrays.copyOf(data,data.length-1);fireTableRowsDeleted(row,row);}