我有以下代码,允许我通过单击从右侧Jtable中删除一行。它适用于所有行,除非只剩下一行。顺便说一句,对不起大多数名字都是葡萄牙语,这是我的母语。以下是我单击表格中最后一行之前和之后显示的图像。它会更新总数,但行仍然存在。对于其他所有情况,它都能很好地运作。
截图:
for (auto &v1: mymap) // v1 = std::pair<double, std::multimap<int, Object*> >
{
auto &mm = v1.second; // mm = std::multimap<int, Object*>
for (auto &v2: mm) // v2 = std::pair<int, Object*>
{
auto obj = v2.second; // obj = Object*
// use obj as needed...
}
}
使用新信息重置表的函数:
private void jtbSelecionadosMouseClicked(java.awt.event.MouseEvent evt)
{
int x = jtbSelecionados.rowAtPoint(evt.getPoint());
if (x >= 0)
{
String nomeProduto = (String)jtbSelecionados.getModel().getValueAt(x, 0);
for (int i = 0; i < itensVenda.size();i++)
{
if (itensVenda.get(i).getNomeProduto().equals(nomeProduto))
{
if(itensVenda.get(i).getQtd() > 1)
{
valorTotal -= (itensVenda.get(i).getPreco() / itensVenda.get(i).getQtd());
double precototal = itensVenda.get(i).getPreco();
double unit = precototal / itensVenda.get(i).getQtd();
System.out.println("Unidade: "+unit+"\nTotal: "+precototal);
itensVenda.get(i).setPreco(itensVenda.get(i).getPreco() - (itensVenda.get(i).getPreco() / itensVenda.get(i).getQtd()));
itensVenda.get(i).setQtd(itensVenda.get(i).getQtd() - 1);
recarregarTabela();
}
else if(itensVenda.get(i).getQtd() <= 1)
{
valorTotal -= itensVenda.get(i).getPreco() / itensVenda.get(i).getQtd();
itensVenda.remove(i);
recarregarTabela();
}
}
}
}
答案 0 :(得分:2)
每次删除单行时,您都不必重建整个模型。由于您已经拥有点击或选定行的索引,因此您可以使用removeRow(index)
方法将其从模型中删除。我怀疑dtm
是DefaultTableModel
所以每次需要从表中删除行时都要调用dtm.removeRow(index)