文档



JavaFX:使用JavaFX UI组件

4 单选按钮

本章讨论单选按钮控件和RadioButton类,它是ToggleButton类的一个特殊实现。

单选按钮控件可以被选中或取消选中。通常,单选按钮被组合成一个组,一次只能选择一个按钮。这种行为使它们与切换按钮不同,因为组中的所有切换按钮都可以处于取消选中状态。

图4-1显示了RadioButton示例的三个屏幕截图,其中添加了三个单选按钮到一个组中。

图4-1 单选按钮示例

一组三个单选按钮
"图4-1 单选按钮示例"的描述

请阅读以下段落,了解如何在应用程序中实现单选按钮。

创建单选按钮

JavaFX SDK的javafx.scene.control包中提供了RadioButton类,它提供了两个构造函数,可以用来创建单选按钮。 示例4-1显示了两个单选按钮。使用没有参数的构造函数创建rb1。使用setText方法设置了该单选按钮的文本标签。rb2的文本标签在相应的构造函数中定义。

示例4-1 创建单选按钮

//一个没有标签的单选按钮
RadioButton rb1 = new RadioButton();
//设置文本标签
rb1.setText("主页");
//一个带有指定标签的单选按钮
RadioButton rb2 = new RadioButton("日历");

您可以使用setSelected方法将单选按钮显式地设置为选中状态,并将其值指定为true。如果您需要检查用户是否选择了特定的单选按钮,请使用isSelected方法。

由于RadioButton类是Labeled类的扩展,您不仅可以指定文本标签,还可以指定图像。使用setGraphic方法指定图像。 示例4-2演示了如何在应用程序中实现图形单选按钮。

示例4-2 创建图形单选按钮

Image image = new Image(getClass().getResourceAsStream("ok.jpg"));
RadioButton rb = new RadioButton("同意");
rb.setGraphic(new ImageView(image));

向组中添加单选按钮

单选按钮通常用于组中,以呈现几个互斥的选项。 ToggleGroup 对象提供了与其关联的所有单选按钮的引用,并管理它们,以便一次只能选择一个单选按钮。 示例4-3 创建了一个切换组,创建了三个单选按钮,将每个单选按钮添加到切换组,并指定应用程序启动时应选择哪个按钮。

示例4-3 创建一组单选按钮

final ToggleGroup group = new ToggleGroup();

RadioButton rb1 = new RadioButton("主页");
rb1.setToggleGroup(group);
rb1.setSelected(true);

RadioButton rb2 = new RadioButton("日历");
rb2.setToggleGroup(group);
 
RadioButton rb3 = new RadioButton("联系人");
rb3.setToggleGroup(group);

当使用布局容器布局这些单选按钮并将它们添加到应用程序的内容时,输出应该类似于图4-2

图4-2 三个单选按钮组合在一起

三个单选按钮:主页,日历,联系人
"图4-2 三个单选按钮组合在一起"的描述

处理单选按钮的事件

通常,当单选按钮组中的一个按钮被选中时,应用程序会执行一个动作。请查看示例4-4中的代码片段,了解如何根据选中的单选按钮来更改图标。

示例4-4 处理单选按钮的动作

ImageView image = new ImageView();

rb1.setUserData("主页")
rb2.setUserData("日历");
rb3.setUserData("联系人");

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);
    }
});

为每个单选按钮分配了用户数据。ChangeListener<Toggle>对象检查组中的选中的按钮。它使用getSelectedToggle方法来确定当前选中的单选按钮,并通过调用getUserData方法提取其用户数据。然后,将用户数据应用于构建要加载的图像文件名。

例如,当选择rb3时,getSelectedToggle方法返回"rb3",getUserData方法返回"联系人"。因此,getResourceAsStream方法接收值"联系人.jpg"。应用程序的输出显示在图4-1中。

请求为单选按钮设置焦点

在单选按钮组中,默认情况下,第一个按钮会自动获得焦点。如果你将setSelected方法应用于组中的第二个单选按钮,你应该期望看到图4-3中所示的结果。

图4-3 默认焦点设置

第二个单选按钮被选中。
图4-3 默认焦点设置的描述

第二个单选按钮被选中,第一个按钮保持焦点。使用requestFocus函数来改变焦点,如示例4-5所示。

示例4-5 请求为第二个单选按钮设置焦点

rb2.setSelected(true);
rb2.requestFocus();

应用此代码后,会产生图4-4中所示的结果。

图4-4 为选中的单选按钮设置焦点

第二个单选按钮获得焦点。
图4-4 为选中的单选按钮设置焦点的描述

相关API文档 

关闭窗口

目录

JavaFX:使用JavaFX UI组件

展开 折叠