Sim*_*iné 4 swing jtable addeventlistener abstracttablemodel
我有一个Jtable和我的dataModel的问题.我的表模型扩展了AbstracttableModel,数据存储在Vector中.我有一个功能女巫假设要删除一行或多行.这些行不一定是连续的,因为我的jtable将selectionMode设置为:
jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
Run Code Online (Sandbox Code Playgroud)
删除行的功能(逐个):
public void removeMessageRow(Integer p_idMessage) {
Enumeration<MlMessage> alldatas = vData.elements();
while (alldatas.hasMoreElements()) {
MlMessage m = alldatas.nextElement();
if (m.getIdMessage() == p_idMessage) {
int idx = vData.indexOf(m);
boolean result = vData.remove(m);
// fireTableDataChanged();
// fireTableRowsDeleted(idx, idx);
fireTableStructureChanged();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动该功能时,我执行循环没有问题,在逐步模式下,我可以看到更新的vData对象,如果我执行这一次只有一次没有GUI的问题.当我选择多行时会出现问题.例如,我在我的表中选择了行号0和数字1,并且我执行了removeMessageRow函数,在第一次执行时,vDataObject被正确更新(所有数据都被删除,并且此向量的最后元素被设置为null打电话vData.remove(m)
.所以在我的情况,我希望在第二个执行,找对象应该是在位置0,但它在为VDATA对象从未更新过位置1.没有任何人有关于这种想法?我已经尝试了许多火上浇油的东西,但没有人立即执行.感谢任何帮助提前和抱歉我的莎士比亚的语言.
JB *_*zet 15
在模型中添加一个方法,使用一组索引删除(Set<Integer>
,或int[]
),对此集合进行排序,在此集合中向后迭代,并删除模型对象列表中的元素:
public void removeRows(int[] indices) {
Arrays.sort(indices);
for (int i = indices.length - 1; i >= 0; i--) {
this.data.remove(indices[i]);
fireTableRowsDeleted(indices[i], indices[i]);
}
}
Run Code Online (Sandbox Code Playgroud)