-1

I am trying to add a row to my JTable, I am using an abstract method which is shown below. I am currently taking data from a List to setValueAt my JTable. Does anyone have any idea on how to add a row to this without changing the types of columnNames and data? Using a method called addRows that is. I have looked around but no other questions on here solved my problem.

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);
    }        
}
Fjondor
  • 39
  • 7

1 Answers1

1

The following method adds a row at the end:

    public void addRow(Object[] newRow) {
        data = Arrays.copyOf(data, data.length+1);
        data[data.length-1] = newRow;
        fireTableRowsInserted(data.length-1, data.length-1);
    }

Use it like this:

    model.addRow(new Object[]{"Kathy", "Smith",
                    "Snowboarding", new Integer(5), new Boolean(false)}
    );
Danny Daglas
  • 1,501
  • 1
  • 9
  • 9
  • I must've done something wrong with my removeRow, I tried to fix it but doesn't work. Do you know how to fix my removeRow method? – Fjondor Jan 05 '15 at 15:28
  • This should work: public void removeRow(int row) { System.arraycopy(data,row+1,data,row,data.length-row-1); data = Arrays.copyOf(data, data.length-1); fireTableRowsDeleted(row, row); } – Danny Daglas Jan 05 '15 at 16:25