Dúvida Jtable incrementar quantidade de produto igual

Alguém pode me ajudar, estou com dúvida em minha Jtable, tenho uma tabela com o código do serviço, serviço, quantidade, valor e total. Minha dúvida é o seguinte, quando eu adicionar na tabela um ITEM 1 por exemplo, os dados deste serviço serão adicionados na tabela, até então eu consegui fazer, mas caso eu adicione novamente este mesmo ITEM 1 na tabela eu queria incrementar a qtde que o usuário fosse digitar e não criar uma nova linha repetindo, ITEM 1 e ITEM 1. segue abaixo o meu código para adicionar na tabela.

private void insereItem()
{
    if (txtQtde.getValue().equals(0))
    {
        JOptionPane.showMessageDialog(this, "Informe uma quantidade para adicionar o serviço na tabela", "Atenção", JOptionPane.ERROR_MESSAGE);
        txtQtde.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else
    {
        try
        {
            txtQtde.setBorder(BorderFactory.createLineBorder(Color.GRAY));
            DefaultTableModel modelo = (DefaultTableModel) tbOs.getModel();
            String valUni = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
            double vtt = Double.parseDouble(valUni) * Integer.parseInt(txtQtde.getValue().toString());

            String total = String.valueOf(vtt);
            if (total.substring(total.lastIndexOf(".") + 1).length() < 2)
            {
                total = total + "0";
            }
            String unitario = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
            if (unitario.substring(unitario.lastIndexOf(".") + 1).length() < 2)
            {
                unitario = unitario + "0";
            }
            Object[] linha =
            {
                txtCodigoServico.getText(), cbbServico.getSelectedItem(), txtQtde.getValue().toString(), unitario, total
            };

            modelo.addRow(linha);

            double valorSubTotal = vtt + Double.parseDouble(txtSubTotal.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", "."));
            setValorSubTotal(valorSubTotal);
            tbOs.setModel(modelo);
            atualizaSoma();
        } catch (Exception e)
        {
        }
    }
}

Acho que você terá que verificar se o Item que está sendo adicionado já existe na Tabela, e apenas incrementar a qtde dele se já existir.

Sim, mas a forma de como farei isto que estou em dúvida.

O que você acha de percorrer todas as linhas da tabela em um loop, e, dentro do loop verificar se a linha da iteração atual possui o Item que está sendo adicionado. Se possuir, você incrementa a qtde desse Item e dá um return; pra sair do método. Caso o item ainda não exista na tabela, o loop irá percorrer todas as linhas e a execução irá sair do loop, após sair do loop você adiciona o novo Item.

Você pode me ajudar a fazer isto? Estou meio que perdido, obrigado.

Olha, eu diria que você tem vários problemas na qualidade desse código, isso pode complicar bastante sua vida quando o sistema crescer e conforme ele crescer. Talvez você deva criar uma pergunta pedindo para analisarem seu código e dizerem quais são os “débitos técnicos” nele, mas enfim…

Vou adaptar seu código como está:

private void insereItem()
{
    if (txtQtde.getValue().equals(0))
    {
        JOptionPane.showMessageDialog(this, "Informe uma quantidade para adicionar o serviço na tabela", "Atenção", JOptionPane.ERROR_MESSAGE);
        txtQtde.setBorder(BorderFactory.createLineBorder(Color.RED));
    } else
    {
        if (!atualizarQtdDeItemDaTabela()) {inserirItemNaTabela();} //Adicionei esta linha

        try
        {
            //O código abaixo será executado independente do qtd do Item ter sido incrementado ou do Item ter sido adicionado
            double valorSubTotal = vtt + Double.parseDouble(txtSubTotal.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", "."));
            setValorSubTotal(valorSubTotal);
            tbOs.setModel(modelo);
            atualizaSoma();
        } catch (Exception e)
        {
        }
    }
}
/**retorna true se e somente se o Item já existir na tabela e não for necessário adicioná-lo novamente, false caso ele não esteja na tabela. Este método incrementa a qtd do Item se ele já estiver na tabela.*/
private boolean atualizarQtdDeItemDaTabela()
{
    //Percorra as linhas da tabela aqui dentro, buscando pelo item que se está tentando adicionar
    //Ao encontrar, incremente a qtd dele e então retorne true
    //Se não encontrar, apenas retorn false
}

private void inserirItemNaTabela() /*Adicione lançamento de Exception se precisar*/ {
    txtQtde.setBorder(BorderFactory.createLineBorder(Color.GRAY));
    DefaultTableModel modelo = (DefaultTableModel) tbOs.getModel();
    String valUni = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
    double vtt = Double.parseDouble(valUni) * Integer.parseInt(txtQtde.getValue().toString());

    String total = String.valueOf(vtt);
    if (total.substring(total.lastIndexOf(".") + 1).length() < 2)
    {
        total = total + "0";
    }
    String unitario = txtValor.getText().replace("R$", "").replace(" ", "").replace(".", "").replace(",", ".");
    if (unitario.substring(unitario.lastIndexOf(".") + 1).length() < 2)
    {
        unitario = unitario + "0";
    }
    Object[] linha =
    {
        txtCodigoServico.getText(), cbbServico.getSelectedItem(), txtQtde.getValue().toString(), unitario, total
    };

    modelo.addRow(linha);
}