【发布时间】:2025-12-24 14:55:17
【问题描述】:
我有以下代码,允许我通过单击从右侧 Jtable 中删除一行。它适用于所有行,除非只剩下一行。顺便说一句,很抱歉大多数名字都是葡萄牙语,这是我的母语。这是在我单击表格中的最后一行之前和之后显示的图像。它更新总数,但行仍然存在。对于其他所有情况,它都可以完美运行。
截图:
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();
}
}
}
}
使用新信息重置表的函数:
private void recarregarTabela()
{
if (itensVenda.size() == 0)
{
dtm.getDataVector().removeAllElements();
dtm.setRowCount(0);
lblTotal.setText("Total: R$" + String.valueOf(valorTotal));
}
else
{
dtm.getDataVector().removeAllElements();
dtm.setRowCount(0);
for (Item item : itensVenda)
{
Object[] vetor = new Object[3];
vetor[0] = item.getNomeProduto();
vetor[1] = item.getQtd();
vetor[2] = String.format("%.2f", item.getPreco());
System.out.println(item.getPreco());
dtm.addRow(vetor);
}
lblTotal.setText("Total: R$" + String.valueOf(valorTotal));
}
}
【问题讨论】:
-
请参阅:*.com/questions/38227729/… 以获取允许您删除一个(或多个)选定行的示例。
-
我可以删除行,只是在只剩下一行的时候不行
-
那你就不能删除行了!!!最后一行与第一行没有什么不同,除了你的逻辑对待它的方式不同,所以修正你的逻辑。你已经得到了一个有效的例子。从示例中学习。
标签: java swing defaulttablemodel