我有一个弹出菜单可以删除JTable
中的多行。
该表有一个具有布尔值(true / false)的列。如果此列的值为true,则将删除此行。
但索引数组被选中是错误的。
示例:选择索引为2,3,4的行,但结果为0,2,3。始终选择第一行。
如果选择没有条件的多行,结果是正确的。
任何人都可以帮助我?
这是示例代码(使用Netbeans):
private void menuDeleteLOANActionPerformed(java.awt.event.ActionEvent evt) {
int[] rows = this.tabMAIN.getSelectedRows();
try {
for(int i = rows.length-1; i >= 0; i--){
boolean temp = ((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue();
if(temp == true){
System.out.println("ID "+this.tabMAIN.getValueAt(i, 3)+((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue());
}else{
System.out.println("ID "+this.tabMAIN.getValueAt(i, 3)+((Boolean)this.tabMAIN.getValueAt(i, 8)).booleanValue());
}
}
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:2)
您没有访问数组的值。这应该更正确:
private void menuDeleteLOANActionPerformed(java.awt.event.ActionEvent evt) {
int[] rows = this.tabMAIN.getSelectedRows();
try {
for(int i = rows.length-1; i >= 0; i--){
boolean temp = ((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue();
if(temp == true){
System.out.println("ID "+this.tabMAIN.getValueAt(rows[i], 3)+((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue());
}else{
System.out.println("ID "+this.tabMAIN.getValueAt(rows[i], 3)+((Boolean)this.tabMAIN.getValueAt(rows[i], 8)).booleanValue());
}
}
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 1 :(得分:1)
尝试将行索引转换为模型索引
for (int z = 0; z < tblQue1.getRowCount();) {
if ((Boolean) tblQue1.getValueAt(z, 4) == true) {
dmQue1.removeRow(tblQue1.convertRowIndexToModel(z));
} else {
z++;
}
}