jtable删除行的问题
jtable排序后删除行,会出现索引不对应的问题
//设置列表可排序
jTable1.setAutoCreateRowSorter(true);
解决办法
关键代码:
//转换为Model的索引,这句很重要,否则索引不对应
rowIndexes[i] = jTable1.convertRowIndexToModel(rowIndexes[i]);
//排序,这句很重要,否则顺序是乱的
Arrays.sort(rowIndexes);
private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {
int[] rowIndexes = jTable1.getSelectedRows();
if(rowIndexes.length == 0){
JOptionPane.showMessageDialog(null, "请选择行后再删除!");
return;
}
int r = JOptionPane.showConfirmDialog(null,
"你确定要删除吗?", "确认删除",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (r != JOptionPane.YES_OPTION) {
return;
}
for (int i = 0; i < rowIndexes.length; i++)
{
//转换为Model的索引,这句很重要,否则索引不对应
rowIndexes[i] = jTable1.convertRowIndexToModel(rowIndexes[i]);
}
//排序,这句很重要,否则顺序是乱的
Arrays.sort(rowIndexes);
DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
//降序删除
for(int i=rowIndexes.length-1; i>=0; i--){
tableModel.removeRow(rowIndexes[i]);
//与Model对应的列表数据,含有更多元数据
//MainFrame.resultList.remove(rowIndexes[i]);
}
}
网上很多人写的删除方法都不涉及表格排序,涉及表格排序的转换索引后又不排序,
真心感觉jtable的操作太麻烦了,比winform的差多了。