单选按钮更改事件JavaFx

时间:2014-10-23 07:43:20

标签: events javafx radio-button onchange radio-group

我有很多HBox,里面有一些不同的组件(RadioButton,Labels,Buttons ......)。 RadioButtons位于ToggleGroup中,因此只能选择1个单选按钮。

我想在单选按钮上添加一个OnChange - Event。如果未选择RadioButton,则应该有一个事件触发器。如何将事件添加到单选按钮?

目前我有这样的代码,但它没有我想要的功能。

radio.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent arg0) {
            if(!radio.isSelected()){
                ivTriangleImg.setRotate(iRotateCoord2);
                btnTriangle.setGraphic(ivTriangleImg);
            }

            if(group!=null){
                group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {

                    @Override
                    public void changed(
                            ObservableValue<? extends Toggle> arg0,
                            Toggle arg1, Toggle arg2) {

                    }
                });
            }
        }
    });

我使用JavaFX 2.0和Java 1.7,所以我不能使用Lambda函数或JavaFx8 / Java 1.8的特殊组件函数

2 个答案:

答案 0 :(得分:5)

JavaFX控件的状态由可观察的属性表示。您可以使用control.propertyNameProperty()add ChangeListeners访问这些属性:

radioButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> obs, Boolean wasPreviouslySelected, Boolean isNowSelected) {
        if (isNowSelected) { 
            // ...
        } else {
            // ...
        }
    }
});

答案 1 :(得分:0)

radio.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent arg0) {
            if(!radio.isSelected()){
                ivTriangleImg.setRotate(iRotateCoord2);
                btnTriangle.setGraphic(ivTriangleImg);
            }

            if(group!=null){
                group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {

                    @Override
                    public void changed(
                            ObservableValue<? extends Toggle> arg0,
                            Toggle arg1, Toggle arg2) {

                        if(!radio.isSelected()&&ivTriangleImg.getRotate()!=iRotateCoord1){
                            ivTriangleImg.setRotate(iRotateCoord1);
                            btnTriangle.setGraphic(ivTriangleImg);
                        }

                    }
                });
            }
        }
    });

这对我的问题有用。我犯了一个小错误,所以我不检查Radio-Style。它现在工作正常...对不起这个问题。

是否可以在单选按钮上查看事件,而不是在他的小组中查看?