助记符如何与Radio Buttons一起使用

cam*_*ckr 5 java javafx

我期待当我使用Alt +助记符时,相关的单选按钮会变得集中和被选中.我的期望是基于我对Swing中助记符如何工作的了解.我的期望是错的吗?

在我下面的示例代码中,我将每个单选按钮的编号设置为助记符.

  1. 程序启动时选择"选项1".
  2. 当我使用Alt + 3时,程序会发出哔哔声,所有助记符都会加下划线,"选项3"会变得集中但不会被选中.GUI现在看起来像这样:

http://i.stack.imgur.com/ip3om.png

  1. 如果我只输入2,"选项2变得集中,但未选中.

这是代码:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.image.*;
import javafx.scene.input.*;
import javafx.scene.effect.*;
import javafx.scene.paint.*;
import javafx.beans.value.*;
import javafx.geometry.*;

import javafx.event.*;

public class RadioButtonSSCCE extends Application
{
    public Parent createScene()
    {
        ToggleGroup group = new ToggleGroup();

        RadioButton rb1 = new RadioButton( "Option _1" );
        rb1.setUserData("Option 1 selected");
        rb1.setToggleGroup( group );

        RadioButton rb2 = new RadioButton( "Option _2" );
        rb2.setUserData("Option 2 selected");
        rb2.setToggleGroup( group );

        RadioButton rb3 = new RadioButton( "Option _3" );
        rb3.setUserData("Option 3 selected");
        rb3.setToggleGroup( group );

        VBox root = new VBox(5);
        root.setAlignment(Pos.CENTER);
        root.getChildren().addAll(rb1, rb2, rb3);

        ChangeListener<Toggle> cl = new ChangeListener<Toggle>()
        {
            @Override
            public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle)
            {
                if (group.getSelectedToggle() != null)
                {
                    String text = group.getSelectedToggle().getUserData().toString();
                    System.out.println( text );
                }
            }
        };
        group.selectedToggleProperty().addListener(cl);

        rb1.setSelected( true );

        return root;
    }

    @Override
    public void start(Stage primaryStage)
    {
        Scene scene = new Scene(createScene(), 125, 125);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Radio Button SSCCE");
        primaryStage.show();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现为了调用助记符,我必须:

  1. 按下并释放Alt键.现在每个单选按钮的助记符都带有下划线.
  2. 按下数字,单选按钮变得聚焦.但是,我现在需要使用空格键来选择单选按钮.

为什么我需要按空格键?按下助记符时是否应该选择单选按钮?

另外,为什么我不能只使用Alt +助记符作为单个组合键来选择一个单选按钮?

我的代码错了吗?

编辑:

操作是选择单选按钮的关键.我创建了一个由所有按钮共享的通用操作:

EventHandler<ActionEvent> onAction = new EventHandler<ActionEvent>()
{
    @Override
    public void handle(ActionEvent e)
    {
        RadioButton button = (RadioButton)e.getSource();
        button.setSelected(true);
    }
};

rb1.setOnAction( onAction );
rb2.setOnAction( onAction );
rb3.setOnAction( onAction );
Run Code Online (Sandbox Code Playgroud)

由于单选按钮是按钮组的一部分,我不希望能够取消选择按钮.

Ott*_*ime 3

JavaFX 中的Mnemonic会触发针对注册的ActionEventNode。在 的情况下RadioButton,ActionEvent 不会切换选择。您可以向 ActionEvent 添加一个通用处理程序,RadioButton如下所示(假设这是 JavaFX 8)。

rb1.setOnAction(event -> rb1.setSelected(!rb1.isSelected()));
Run Code Online (Sandbox Code Playgroud)