Olá a todos!
Pesquisei em vários locais, inclusive aqui no fórum, e não encontrei nenhuma resposta sobre a seguinte situação:
Tenho um TreeTableView que carrega vários itens vindos do Banco de Dados. De acordo com a característica de cada item, eles são divididos em nós previamente especificados (são apenas estes nós pré-estabelecidos).
Exemplo dos Nós: Materiais, Medicamentos, Taxas, Aluguéis…
Em um determinado momento, preciso imprimir essa TreeTableView, excluindo algumas linhas que são desnecessárias. Quanto à impressão está tudo ok.
Mas, para ganhar tempo, eu preciso excluir várias linhas de uma vez dessa TreeTableView, apertando o Shift e clicando/selecionando todas as linhas que deverão ser excluídas.
Antes de postar o método que encontrei, vou detalhar como estou fazendo:
Quando abro a TreeTableView, os dados originados do Banco de Dados são salvos em um ObservableList ol_OUTRASDESPESAS. Esse ObservableList é então processado e a TreeTableView é criada com cada item em seu nó específico. Preciso então imprimir essa TreeTableView, mas para isso, em alguns casos, preciso excluir várias linhas ao mesmo tempo.
O que estou fazendo:
Crio uma ObservableList transitória (ol_TEMP) com todas as linhas que estão selecionadas. Criei um laço for que percorre todos os itens da ol_OUTRASDESPESAS e um laço interno que percorre todos os itens da ol_TEMP. Dentro desses laços verifico se existe um ID dentro de ol_TEMP que seja igual ao id de ol_OUTRASDESPESAS. Se os IDs forem iguais, eu excluo o item de ol_OUTRASDESPESAS.
Segue o código:
private void excluirItem_OutrasDespesas() {
ObservableList<TreeItem<objOutrasDespesas>> ol_TEMP = FXCollections.observableArrayList(ttvOutrasDespesas.getSelectionModel().getSelectedItems());
//Percorrendo todos os itens das Listas Se o item atual estiver em ambas, excluir.
for (int j = 0; j<ol_T.size(); j++) {
for (int i = 0; i<ol_OUTRASDESPESAS.size(); i++) {
if (Objects.equals(ol_OUTRASDESPESAS.get(i).getId(), ol_T.get(j).getValue().getId())) {
//System.out.println("Removendo: "+ol_OUTRASDESPESAS.get(i).getItem());
ol_OUTRASDESPESAS.remove(i);
}
}
}
estruturaBasica();
}
Observação:
estrutura() é apenas uma chamada ao método para reconstruir a TreeTableView.
Essa foi a maneira que encontrei para excluir os itens selecionados, porém não creio que seja a melhor. Sei que em Java existe o método removeAll, porém não consegui aplicar nesse caso.
A minha dúvida é a seguinte: Existe outra opção melhor do que essa? Consigo evitar todos esses loops necessários para excluir todos os itens selecionados?