Ordem de Eventos Listeners JAVAFX

Tenho um tableView com um listener ao selecionar uma nova linha do table view, e tenho um textfield que recebe um valor de uma das colunas do tableView;

O textfield tem um listenter ao perder o foco do campo ele atualiza o valor da linha selecionada no tableview;

O problema ocorre quando eu altero o valor do textfield e seleciono uma nova linha que o evento de selecionar a nova linha sobrepoe o listener do campo texto;

Como eu poderia definir que o evento de perder o foco do textfield sempre será executado antes do listener do tableView?

//Evento que controla o foco do campo texto, ao sair do campo ele altera os valores no tableView
txtValorVenda.focusedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue,
            Boolean newPropertyValue) {

        if (!newPropertyValue) {
            if (!btnInsert.isPressed() && !btnClose.isPressed() && !btnCancel.isPressed()){

            



  tbViewPrecosEmp.getSelectionModel().getSelectedItem().setVlrVendaVarejo(Util.decimalBRtoBigDecimal(2,txtValorVenda.getText()));
                tbViewPrecosEmp.refresh();


            }
        }
    }
});


//Evento que controla a seleção de um item no tableView
//Quando uma linha é selecionada carrega os valores do tableView nos textfields correspondentes
tbViewPrecosEmp.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
    if (newSelection != null) {
        // CARREGA OS DADOS DA LINHA SELECIONADA OBJETO INSTANCIADO
            txtCusto.setText(tbViewPrecosEmp.getSelectionModel().getSelectedItem().getVlrCusto().toString());
            txtMargem.setText(tbViewPrecosEmp.getSelectionModel().getSelectedItem().getMargemLucroVarejo().toString());
            txtValorVenda.setText(tbViewPrecosEmp.getSelectionModel().getSelectedItem().getVlrVendaVarejo().toString());
    }
});

O problema é quando o usuário preenche um novo valor no textField, e clica em uma nova seleção no tableView com isso o evento do tableview executa primeiro que o do foco perdido do campo texto e o valor da linha selecionada anteriormente não é alterada;

Troque o evento do textfield para a textProperty, ou faça o bind diretamente com o objeto da linha selecionada.

Eu já tinha pensado em add o listener no TextProperty para atualizar a tabela enquanto digita, mas em alguns casos da aplicação isso não resolve o problema…

Então a solução mais “simples” pra você seria criar um método para “persistir” esse valor no objeto da linha e chamá-lo tanto no evento de perda do foco do campo quanto no evento de selecionar a linha na tabela, mas creio que a solução com binding seria a mais adequada, eliminaria até os listners.

Ok, estou verificando sobre a questão do Bind, na propriedade de seleçao de uma linha do tableview add
txtLocacao.textProperty().bindBidirectional(new SimpleStringProperty(newSelection.getLocacao()));

Pelo que entendi conforme eu altere o valor no textField era pra aparecer a alteração no TableView, mas ele está fazendo apenas o contrário enviando os dados do TableView para o TextField.

Isso ocorre por causa do new, nesse caso suas classes deveriam ter atributos do tipo property para dar certo, andei pesquisando e não há uma forma efetiva de fazer isso com objetos java normal (POJOs).