Classe Venda está retornando somente a última venda

Olá, estou fazendo um projeto, e estou com dificuldades em armazenar os dados de vendas na classe Venda. Eu tenho dificuldade em saber quando eu ponho static ou não, talvez eu tenha errado isso em algum lugar… Quando eu faço um método pra retornar uma String com mostrando as vendas, sempre mostra a última venda, por exemplo, se eu atribui uma compra de um celular e de um liquidificador, quando eu executar a String, vai mostrar como se tivessem 2 compras de 1 liquidificador.

A classe venda tem um ArrayList do tipo Venda que vai guardar cada venda, talvez tenha algum problema em guardar as informações nessa ArrayList…

Vou deixar o código das minhas classes que eu acho que talvez esteja o erro

Classe do Produto: https://pastebin.com/5SWtCsHE
Classe de Vendas: https://pastebin.com/Tz5mLuC9

Eu fiz um JDialog onde a pessoa vai atribuir a compra, o botão de salvar está assim:

public void actionPerformed(ActionEvent e) {
			Integer indiceVendedor = 0;
			Integer indiceComprador = 0;
			Integer indiceProduto = 0;
			Integer quantidade = 0;
			
			indiceVendedor = vendedorCB.getSelectedIndex();
			indiceComprador = compradorCB.getSelectedIndex();
			indiceProduto = produtoCB.getSelectedIndex();
			quantidade = Integer.parseInt(produtoQuantidade.getValue()+"");
			co.atribuirVendedor(indiceVendedor);
			cl.atribuirComprador(indiceComprador);
			p.atribuirProduto(indiceProduto, quantidade);
			
			venda.salvarVenda();
			
			retornoTA.setText(venda.retornoVendas());
			
			venda.incrementar();
		}

E na classe Cliente é esse método que utilizo pra setar o comprador, o no Colaborador segue o mesmo modelo:

public void atribuirComprador(Integer indiceComprador) {
	Venda venda = new Venda();
	for (int i = 0; i < clientes.size(); i++) {
		Cliente c = clientes.get(i);
		if(c.codigo.equals(indiceComprador)) {
			venda.setComprador(c.getNome());
		}
	}
}

Eu tentei refazer e continua dando o erro, agora piorou porque tentei mudar a lógica de tudo. Não consigo retornar a string pra classe que vai mostrar o resultado. Se eu faço um showMessageDialog no objeto que foi adicionado assim que salvar, aparece normalmente o toString, mas se eu tento mostrar o resultado por meio dessa String aparece assim:

image

Esse retorna o resultado

public String retornoResultados() {
	StringBuffer sb = new StringBuffer();
	sb = new StringBuffer();
	sb.append("Novo colaborador:\n\n");
	for (int i = colaboradores.size(); i < colaboradores.size(); i++) {
		Colaborador c = colaboradores.get(i);
		sb.append("Nome: "+c.getNome()+"\n");
		sb.append("Data de nascimento: "+c.getDataNascimento()+"\n");
		sb.append("CPF: "+c.getCpf()+"\n");
		sb.append("Telefone: "+c.getTelefone()+"\n");
		sb.append("E-mail: "+c.getEmail()+"\n");
		sb.append("Salário: "+c.getSalario()+"\n");
		sb.append("=================");
		sb.append("\n\n");
	}
	return sb.toString();
}

A variável i está sendo iniciada com o tamanho da lista, logo i nunca será menor que colaboradores.size(), isso implica diretamente na não execução do laço, fazendo com que as informações internas dele não sejam incluídas no StringBuffer.

Tira o static dos atributos dessas classes.

Olá gente, eu já consegui arrumar, fiquei horas e horas revisando e tentando várias formas diferentes, e finalmente consegui, mas muito obrigado a vocês!

Se alguém quiser ver como ficou, ficou assim por enquanto:
criei uma classe chamada empresa que vai guardar todos os ArrayList e carregar a maioria das coisas que preciso
Empresa: https://pastebin.com/YwYYpAi1
Produto: https://pastebin.com/gLAP2pPb

e o botão de vender do frame de vender ficou assim:
public void actionPerformed(ActionEvent e) {
//TODO SALVAR

			Integer indiceVendedor = 0;
			Integer indiceComprador = 0;
			Integer indiceProduto = 0;
			Integer quantidade = 0;
			
			indiceVendedor = vendedorCB.getSelectedIndex();
			indiceComprador = compradorCB.getSelectedIndex();
			indiceProduto = produtoCB.getSelectedIndex();
			quantidade = Integer.parseInt(produtoQuantidade.getValue()+"");

			String vendedor = empresa.atribuirVendedor(indiceVendedor);
			String comprador = empresa.atribuirComprador(indiceComprador);
			String produto = empresa.atribuirProduto(indiceProduto);
			
			Venda v = new Venda(produto, comprador, vendedor, quantidade);
			v.setarValoresVenda(indiceProduto);
			empresa.addVendas(v);
			
			
			retornoTA.setText(Empresa.retornoVendas());
			
			venda.incrementar();
		}