无法删除Jtable中的最后一行

时间:2017-09-19 23:03:04

标签: java swing defaulttablemodel

我有以下代码,允许我通过单击从右侧Jtable中删除一行。它适用于所有行,除非只剩下一行。顺便说一句,对不起大多数名字都是葡萄牙语,这是我的母语。以下是我单击表格中最后一行之前和之后显示的图像。它会更新总数,但行仍然存在。对于其他所有情况,它都能很好地运作。

截图:

enter image description here

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(); 
                }

            }

        }
    }    

1 个答案:

答案 0 :(得分:2)

每次删除单行时,您都不必重建整个模型。由于您已经拥有点击或选定行的索引,因此您可以使用removeRow(index)方法将其从模型中删除。我怀疑dtmDefaultTableModel所以每次需要从表中删除行时都要调用dtm.removeRow(index)