Olá a todos,
Eu tenho uma TreeTableView que tem 3 níveis de TreeItens.
Meu objetivo é criar um ContextMenu com opções diferentes para cada nível do TreeItem selecionado.
Pensei em adicionar um Listener na minha TreeTableView e pegar a linha selecionada comparar e criar o ContextMenu, mas eu não sei o que fazer a partir do listener, abaixo está o que eu comecei a fazer:
tbMovFinanceiro.getSelectionModel().selectedItemProperty().addListener(
(ObservableValue<? extends TreeItem> observable,
TreeItem oldValue, TreeItem newValue) -> {
//Que evento acionar aqui?
});
Edit 1 -
Eu fiz assim agora, mas não sei se ficou legal… @Andrauss eu peguei o newValue entretanto algumas vezes ele dispara um nullPointerException do nada e nunca do mesmo jeito… as vezes dispara as vezes não, cansei de procurar e fiz ele pegar a lista de objetos selecionados até 50x enquanto não houver um SelectedItem… Melhorou pois ainda não disparou novamente o nullPointer, e ficou assim:
tbPagar.getSelectionModel().selectedItemProperty().addListener(
(ObservableValue<? extends TreeItem> observable,
TreeItem oldValue, TreeItem newValue) -> {
ObservableList<TreeItem> ol = PegaSelecao.getSelecaoMovFinanceiro(tbPagar); //esse método verifica o SelectedItem ate 50x até que tenha algo
if (ol.size() == 1) {
GenericMovFinanceiro selecionado = ol.get(0).getValue();
//Verifica se é de nivel 1
miPagarInserirFilho.setDisable(selecionado.getObjeto() != null);
//Verifica se é de nivel 2
miPagarAbrirMovimento.setDisable(selecionado.getObjeto() == null);
//Verifica se é de nivel 3
miPagarEditar.setDisable(selecionado.getPlano() == null
&& selecionado.getObjeto() == null);
miPagarExcluir.setDisable(selecionado.getPlano() == null
&& selecionado.getObjeto() == null);
}
});