我使用AbstractTableModel
,我试图从JTable
删除选定的行。所选行未被删除;而不是最后一行从JTable删除
我可以从表中选择特定的行;但是当我点击删除按钮时,所选行变为空(即所选行中的所有数据都变为空),最后一行从JTable
中删除。
可能是,我认为,fireTableRowsDeleted()
不工作。请帮助我。我搜索了整个stackoverflow,但我找不到解决方案。
请在下面找到我的代码。
// 删除按钮收听
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);
// 模型类
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);
}
}
请让我知道如果你需要在同任何其他信息。
例子:
说,有7排在我的名单,当我选择第4行并单击删除按钮。
而是第4行越来越删除,它变空,即第4行中的所有值变为零(因为我删除从列表中,data.remove(行)。
然而数据,最后行(第7行)是越来越删除,因为我已经把data.size()在getRowCount()。
PL轻松编辑您的问题,以包含展示您描述的问题的[完整示例](http://stackoverflow.com/help/mcve)。 – trashgod
如果用fireTableDataChanged()替换fireTableRowsDeleted(),结果相同; ? – milez
是的,完全一样...... –