2016-12-21 5 views
0

У меня есть такой код:JavaFX Флажок обрабатывать событие на том же объекте, который генерирует это

CheckBox checkboxFrame1; 

    checkboxFrame1.setOnMousePressed(new EventHandler<MouseEvent>() { 

     @Override 
     public void handle(MouseEvent event) { 
      CheckBox chk = (CheckBox) event.getSource(); 
      if (!chk.isSelected()) 
      { 
       if (makeNotSelected()) { 
        chk.setSelected(false); 
       } 
      } 
     } 

    }); 

или другой версии:

checkboxFrame1.selectedProperty().addListener(new ChangeListener<Boolean>() { 
     @Override 
     public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
      if (makeNotSelected()) { 
        checkboxFrame1.setSelected(false); 
      } 
     } 
    }); 

Оба этих кодов не работают. Я думаю, что они не работают, чтобы избежать условий гонки.

Как я могу использовать событие, которое изменяет статус (выбранный или нет) объекта - флажок - это вызвало его?

Моя цель заключается в тестировании с использованием метода makeNotSelected(), поставьте флажок только в выбранном состоянии.

+0

Там нет условий гонки здесь, потому что все это происходит только на одном потоке. Первый блок кода не может ничего сделать, потому что единственное, что вы выполняете, это 'chk.setSelected (false)', и вы это делаете только в том случае, если 'chk' уже не выбран. Какова логика в 'makeNotSelected()'? Что вы на самом деле пытаетесь сделать? Что происходит во втором блоке кода? –

+0

Если я не ошибаюсь, вы хотите изменить состояние своего флажка при проверке? –

+0

@James_D Я хочу изменить состояние флажка при выборе и на основе значения, возвращаемого makeNotSelected(), поместить его в не выбранное состояние. – famedoro

ответ

0

я решил, используя такой код:

checkboxFrame1.selectedProperty().addListener(new ChangeListener<Boolean>() { 
    @Override 
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { 
     if ((makeNotSelected())&&(checkboxFrame1.isSelected())) { 
       checkboxFrame1.setDisable(true); 
       checkboxFrame1.setSelected(false); 
       checkboxFrame1.setDisable(false); 
     } 
    } 
});