Problema com HorizontalLayout

Bom dia a todos, estou fazendo uma tela de vendas, quando vou add os produtos para realizar a venda, tudo está certo…veja na imagem abaixo:

Placa Mãe, quantidade, valor unitario, e valor total do item
Processador, quantidade, valor unitario, e valor total do item
Memoria, quantidade, valor unitario, e valor total do item

após salvar, quando faço um consulta da venda, para ver os produtos vendidos, eles estão assim:

Eu não entendo o motivo, uma vez que eu “clonei” o código de add produtos, dentro do metodo montarListaProdutos

vejam:

Código para adicionar produtos: (este está certinho)

private void adicionaProduto() {

		ComboBox<Produto> txtProdutos = new ComboBox<>();

		NumberField txtQuantidade = new NumberField("Quantidade");

		TextField txtValorUnitario = new TextField("Valor Unitário");

		TextField txtValorTotalItem = new TextField("Valor Total Item");

		txtProdutos.setWidth("370px");
		txtProdutos.setLabel("Produtos");
		List<Produto> listaDeProdutos = produtoRepository.findAll();
		txtProdutos.setItemLabelGenerator(Produto::getNome);
		txtProdutos.setItems(listaDeProdutos);
		txtProdutos.addValueChangeListener(event -> {
			venda.addProduto(txtProdutos.getValue());
			NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
			try {

				txtValorUnitario.setValue(formatter.format(event.getValue().getValor()));

			} catch (Exception e) {
				e.printStackTrace();
			}

		});

		// ==========================================================================================================================

		txtQuantidade.setHasControls(true);
		txtQuantidade.setValue(null);
		txtQuantidade.setMin(1);

		txtQuantidade.addValueChangeListener(event -> {

			NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
			double valorTotal = 0;

			try {
				valorTotal = formatter.parse(txtValorUnitario.getValue()).doubleValue() * txtQuantidade.getValue();
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			txtValorTotalItem.setValue(formatter.format(valorTotal));

			double soma = 0;// interna
			for (TextField tf : valores) {
				try {
					soma += formatter.parse(tf.getValue()).doubleValue();

				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}

			campoSomaValores.setValue(formatter.format(soma));// externa

		});

		adicionarProdutos = new HorizontalLayout();
		adicionarProdutos.add(txtProdutos, txtQuantidade, txtValorUnitario, txtValorTotalItem);
		centro.add(adicionarProdutos);
		valores.add(txtValorTotalItem);

	}

Código montaListaProdutos

    private void montarListaProdutos(List<ProdutoVendido> produtosVendidos) {
		adicionarProdutos2 = new HorizontalLayout();

		for (ProdutoVendido pv : produtosVendidos) {
			adicionarProdutos2.add(new TextField("Produtos:", (pv.getProduto().getNome())));
			adicionarProdutos2.add(new TextField("Quantidade:", String.valueOf(pv.getQuantidade())));
			adicionarProdutos2.add(new TextField("Valor Unitário:", String.valueOf(pv.getValorUnitario())));
			adicionarProdutos2.add(new TextField("Valor Total Item:", String.valueOf(pv.getValorTotalItem())));
			adicionarProdutos2.getElement();
		}

		centro.add(adicionarProdutos2);
	}

Alguem tem alguma ideia para dar, para que o mesmo comportamento de adicionarProdutos se repita em montarListaProdutos?

Obg desde já

Mova a linha centro.add(adicionarProdutos2) para dentro do for.

@RoinujNosde

permanece com o mesmo comportamento:

Coloca a linha do new HorizontalLayout dentro também.

Deu certo agora @RoinujNosde…muito obg!!!

1 curtida