Bom dia!
Estou com um probleminha numa função recursiva para criar os nodos de uma JTree. Estou fazendo um plano de contas (exemplo aqui), então preciso que os nodos tenham seus valores somados até chegar no nodo raiz, que deve bater com a soma de todos os nodos filhos. Eis meu código:
private void populeDependentes(DefaultMutableTreeNode nodo, List<CentroCusto> centros, CentroCusto centro, List<TransacaoFinanceira> movs) {
List<CentroCusto> ccTemp = getDependentes(centros, centro);
List<Evento> ccEvTemp = getEventosDependentes(centro);
List<TransacaoFinanceira> ccTransTemp = movs;
DefaultMutableTreeNode noCc = new DefaultMutableTreeNode(centro.toString() + " | Saldo anterior: " + nf.format(getSaldoAnterior(centro)) +
" Crédito anterior: " + nf.format(getCreditoAnterior(centro)) +
" Débito anterior: " + nf.format(getDebitoAnterior(centro)) +
" Saldo: " + nf.format(getSaldoAnterior(centro)));
// Se não há contas filhas ou eventos filhos, adiciona o nodo da conta
if (ccTemp.size() == 0 && ccEvTemp.size() == 0) {
nodo.add(new DefaultMutableTreeNode(noCc));
} else {
// Adiciona as transações dentro do nodo do evento
// e o nodo do evento ao nodo da conta
for (Evento e: ccEvTemp) {
DefaultMutableTreeNode noEv = new DefaultMutableTreeNode();
ccTransTemp = getTransacoesDependentes(e);
for (TransacaoFinanceira t: ccTransTemp) {
noEv.add(new DefaultMutableTreeNode("NF: " + trataNulo(t.getConta().getNumNf()) +
" / Data: " + df.format(t.getConta().getDataPagamento()) +
" Valor: " + nf.format(t.getConta().getValorPagamento())));
}
noEv.setUserObject("(" + e.getCodigoEvento() + ") " +e.getDescricao() + " | Total: " + nf.format(getSaldo(ccTransTemp)));
noCc.add(noEv);
}
// Chama recursivamente a função para cada conta filha
// e adiciona-a ao nodo anterior
for (CentroCusto c : ccTemp) {
populeDependentes(noCc, centros, c, ccTransTemp);
}
noCc.setUserObject(centro.toString() + " | Saldo anterior: " + nf.format(getSaldoAnterior(centro)) +
" Crédito anterior: " + nf.format(getCreditoAnterior(centro)) +
" Débito anterior: " + nf.format(getDebitoAnterior(centro)) +
" Saldo: " + nf.format(getSaldoConta(centro, ccTransTemp)));
nodo.add(noCc);
}
}
Esse código gera esta tela:
Do jeito que está, ele cria os nodos corretamente, faz o cálculo de saldo debitado, creditado e geral, mas não passa esse valor para o nodo pai, que por consequencia não o passa adiante. Estou quebrando a cabeça aqui para conseguir fazer isso, mas não estou conseguindo. Alguém tem alguma sugestão?
