I'm using the AbstractTableModel
, and I'm trying to remove the selected row from the JTable
.
I'm able to select the specific row from the table; but when I click on delete button, the selected row becomes empty (i.e. all the data in the selected row becomes null), and the last row is getting deleted from JTable
.
May be, I think, fireTableRowsDeleted()
is not working. Please help me on this. I've searched all over the stackoverflow, but I couldn't find the solution for it.
Please find my code below.
// Delete button listener
btnDelRow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//((DynamicTableModel) model).removeRow(table.getSelectedRow());
int modelRowIndex = table.convertRowIndexToModel(table.getSelectedRow());
DynamicTableModel model = (DynamicTableModel)table.getModel();
model.removeRow(modelRowIndex);
// Model Class
class DynamicTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
ArrayList<String> taskList;
ArrayList<String> dateList;
Map<Integer, Map<Integer, Object>> data =
new HashMap<Integer, Map<Integer, Object>>();
int rows;
int columns;
int rowCount=0;
int colCount;
public DynamicTableModel(ArrayList <String> taskList, ArrayList <String> dateList) {
this.taskList = taskList;
this.dateList = dateList;
rowCount = taskList.size();
}
@Override
public int getRowCount() { return data.size(); }
public int getRows() {
return rows;
}
@Override
public int getColumnCount() { return dateList.size()+2; }
@Override
public boolean isCellEditable(int row, int column) {
if (row == 0) return false;
else return true;
}
@Override
public Object getValueAt(int row, int column)
{
// Check for row
Integer key = new Integer(row);
Map<Integer, Object> rows = data.get(key);
if (rows == null) return null;
// Now check for column
key = new Integer(column);
return rows.get(key);
}
@Override
public String getColumnName(int column) {
return super.getColumnName(column);
}
@Override
public void setValueAt(Object value, int row, int column)
{
// Save cell data
Integer key = new Integer(row);
Map<Integer, Object> rows = data.get(key);
if (rows == null)
{
rows = new HashMap<Integer, Object>();
if(!data.containsKey(key))
data.put(key, rows);
}
key = new Integer(column);
rows.put(key, value);
fireTableCellUpdated(row, column);
}
public void addRow(){
setValueAt("", getRowCount(), getColumnCount());
}
public void removeRow(int row) {
Integer rowKey = new Integer(row);
data.remove(rowKey);
fireTableRowsDeleted(rowKey, rowKey);
}
}
Please let me know if you need any other information on the same.
Example:
Say there are 7 rows in my list, when I select 4th row and click on delete button.
Instead of 4th row getting deleted, it becomes empty, i.e all the values in the 4th row becomes null (since I removed the data from the list, data.remove(row).
However, the last row (7th row) is getting deleted, since I've put data.size() in getRowCount().