创建一个Radio Button
RadioButton类位于JavaFX SDK的 javafx.scene.control 包中,它提供了两个构造方法来创建其实例。例中展示了两个RadioButton。rb1是由无参构造方法创建。这个Radio Button 的文字说明(text
caption)是通过setText方法设置的。rb2的文字说明则是通过对应的构造方法定义的。
1
2
3
4
5
6
7
8
|
//标签为空的Radio Button
RadioButton rb1 = new RadioButton();
//设置标签文字
rb1.setText("Home");
//指定标签文字的Radio Button
RadioButton rb2 = new RadioButton("Calendar");
|
你可以通过调用setSelected方法并指定参数值为true来明确选中一个Radio Button。如果你需要检查某个Radio Button是否被用户选中,可以使用isSelected方法
因为RadioButton类是Labeled类的一个扩展,所以你不仅可以指定文字描述,还可以指定一个图像。你可以使用setGraphic方法来指定一个图像。例展示了如何在你的应用程序中实现一个带图像的Radio Button
创建一个带图像的Radio Button
1
2
3
|
Image image = new Image(getClass().getResourceAsStream("ok.jpg"));
RadioButton rb = new RadioButton("Agree");
rb.setGraphic(new ImageView(image));
|
添加Radio Button到Group
Radio Button通常用于呈现一个组中几个相互排斥的选项。ToggleGroup 对象提供与之关联的Radio Button的引用并管理它们(将几个关联的RadioButton对象圈在一个应用组里,使得组内同时只有一个Radio Button对象能被选中)。例创建了一个ToggleGroup对象,和三个Radio Button对象,将所有RadioButton对象都添加到了ToggleGroup中,并且指定了哪个RadioButton对象在程序启动时会被选默认中。
例创建一组Radio Button
1
2
3
4
5
6
7
8
9
10
11
|
final ToggleGroup group = new ToggleGroup();
RadioButton rb1 = new RadioButton("Home");
rb1.setToggleGroup(group);
rb1.setSelected(true);
RadioButton rb2 = new RadioButton("Calendar");
rb2.setToggleGroup(group);
RadioButton rb3 = new RadioButton("Contacts");
rb3.setToggleGroup(group);
|
当这些RadioButton对象通过容器布局展现并添加到应用程序中后,运行效果如图所示。
三个 RadioButton对象组合在一个ToggleGroup组中
处理Radio Button事件
通常,在组中的某个Radio Button被选中时,应用程序会执行一个动作。查看例来学习如何根据某个RadioButton对象的选中来更换图标
处理Radio Button动作事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
ImageView image = new ImageView();
rb1.setUserData("Home")
rb2.setUserData("Calendar");
rb3.setUserData("Contacts");
final ToggleGroup group = new ToggleGroup();
group.selectedToggleProperty().addListener(
(ObservableValue<? extends Toggle> ov, Toggle old_Toggle,
Toggle new_Toggle) -> {
if (group.getSelectedToggle() != null) {
final Image image = new Image(
getClass().getResourceAsStream(
group.getSelectedToggle().getUserData().toString() +
".jpg"));
icon.setImage(image);
}
});
|
用户数据(User Data)被指定给了每个Radio Button。ChangeListener<Toggle>对象会检测Group中被选中的开关按钮。然后使用Group的getSelectedToggle方法得到当前选中的Radio Button,并通过调用getUserData方法提取User Data。然后User Data被用来构造成一个图像文件名来加载图像
当rb3被选中时,getSelectedToggle方法会返回rb3的引用,而getUserData方法会返回“Contacts”。因此getResourceAsStream 方法会收到值为“Contacts.jpg” 的字符串作为参数。运行应用程序效果如图
为Radio Button请求焦点
在一组Radio Button中,默认情况下第一个Radio Button会最先获得焦点。如果你在第二个Radio Button上调用setSelected方法,其预期结果如图
默认焦点设置
在图中第二个Radio Button被选中了,但第一个Radio Button依然保持着焦点。你可以使用requestFocus方法来更改焦点
为第二个Radio Button请求焦点
1
2
|
rb2.setSelected(true);
rb2.requestFocus();
|
代码生效后的运行效果如图
为选中的Radio Button 设置焦点