每当使用箭头键导航到 ToggleGroup 时选择 RadioButton

Selecting a RadioButton in a ToggleGroup whenever it is navigated to with the arrow keys

我有一个程序包含一系列共享 ToggleGroupRadioButton。以下为简化版:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        ToggleGroup toggleGroup = new ToggleGroup();

        RadioButton button1 = new RadioButton();
        button1.setText("Button 1");
        button1.setOnAction(this::printSelectedRadioButton);
        button1.setToggleGroup(toggleGroup);

        RadioButton button2 = new RadioButton();
        button2.setText("Button 2");
        button2.setOnAction(this::printSelectedRadioButton);
        button2.setToggleGroup(toggleGroup);

        VBox root = new VBox(10);
        root.setAlignment(Pos.CENTER);
        root.getChildren().addAll(button1, button2);

        primaryStage.setScene(new Scene(root, 100, 100));
        primaryStage.show();
    }

    private void printSelectedRadioButton(ActionEvent actionEvent) {
        RadioButton radioButton = (RadioButton) actionEvent.getSource();
        System.out.println(radioButton.getText());
    }

    public static void main(String[] args) {
        launch(args);
    }
}

当我单击 RadioButton 时,会触发 ActionEvent 并调用 printSelectedRadioButton() 方法。但是,一旦我单击 RadioButton,如果我使用箭头键导航到另一个,则不会触发 ActionEvent 并且不会调用该方法。我希望导航到特定按钮与单击它具有相同的效果。我该怎么做?

RadioButton#setOnAction 仅在点击时起作用。如果你想获得选中的单选按钮,你必须将 ChangeListener 添加到 ToggleGroup。

    ToggleGroup toggleGroup = new ToggleGroup();
    toggleGroup.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> {
        if (toggleGroup.getSelectedToggle() != null) {
            System.out.println("selected radio button: " + toggleGroup.getSelectedToggle());
        }
    });