javafx复选框处理生成它的同一对象上的事件

时间:2016-12-21 19:14:44

标签: events checkbox javafx listener

我有这样的代码:

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()方法进行测试,将刚刚选中的复选框置于非选中状态。

1 个答案:

答案 0 :(得分: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);
        }
    }
});