【问题标题】:JavaFX: RadioButton doesn't change userData on first clickJavaFX:RadioButton 在第一次单击时不会更改 userData
【发布时间】:2018-03-10 02:10:06
【问题描述】:

在每个场景中,我都有多个 toggleGroups,每个都有两个 RadioButtons。无论我首先选择哪个场景上的哪个 RadioButton,听众都听不到。它仍然为空,而不是保存设置的用户数据。如果我第二次按下它,它就会起作用。

当我改变场景时,一切都是一样的。听众不听第一个动作。

这是一个已知的错误吗?我这样保存 userData:

@FXML private RadioButton rbCheck11; @FXML private RadioButton rbCheck12;
@FXML private ToggleGroup group1;
public static String[] values = new String[326];

@FXML
private void testing() {
rbCheck11.setUserData(1); rbCheck12.setUserData(0);
group1.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
        if (group1.getSelectedToggle() != null){
            values[0] = group1.getSelectedToggle().getUserData().toString();
        }
    });
}

【问题讨论】:

    标签: java javafx radio-button javafx-8


    【解决方案1】:

    在 FXML 文件中,您使用 testing() 连接回调:

    @FXML
    private void testing() { ... attach selectedToggleProperty of the ToggleGroup ... }
    

    您没有共享 FXML,所以只是猜测,例如您将 RadioButtons 的 onAction 设置为 testing

    <RadioButton fx:id="rbCheck11" layoutX="121.0" layoutY="115.0" mnemonicParsing="false" 
       onAction="#testing" text="RadioButton">
       <toggleGroup>
          <ToggleGroup fx:id="group1" />
       </toggleGroup>
    </RadioButton>
    <RadioButton fx:id="rbCheck12" layoutX="127.0" layoutY="166.0" mnemonicParsing="false" 
       onAction="#testing" text="RadioButton" toggleGroup="$group1" />
    

    在这种情况下,testing 将仅在您单击 RadioButtons 之一时执行。

    并且只要testing 将监听器附加到ToggleGroupselectedProperty 上,监听器将仅在选择更改时执行。

    更糟糕的是,每次按下单选按钮都会附加一个新的听众,因此您的群组中的听众会越来越多。

    为了解决这个问题,将testing 的主体移动到控制器的initialize 方法中,以便在加载FXML 文件后仅将其附加到组一次。然后从控制器中完全删除testing

    【讨论】:

    • 太棒了,它有效!希望我早点问过 - 会节省我很多时间设置所有 RadioButtons onAction。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2012-11-03
    • 2019-11-27
    • 2013-01-06
    相关资源
    最近更新 更多