我期待当我使用Alt +助记符时,相关的单选按钮会变得集中和被选中.我的期望是基于我对Swing中助记符如何工作的了解.我的期望是错的吗?
在我下面的示例代码中,我将每个单选按钮的编号设置为助记符.

这是代码:
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)
我发现为了调用助记符,我必须:
为什么我需要按空格键?按下助记符时是否应该选择单选按钮?
另外,为什么我不能只使用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)
由于单选按钮是按钮组的一部分,我不希望能够取消选择按钮.
JavaFX 中的Mnemonic会触发针对注册的ActionEventNode。在 的情况下RadioButton,ActionEvent 不会切换选择。您可以向 ActionEvent 添加一个通用处理程序,RadioButton如下所示(假设这是 JavaFX 8)。
rb1.setOnAction(event -> rb1.setSelected(!rb1.isSelected()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1127 次 |
| 最近记录: |