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;