从零开始学习JavaFX(8) 控件篇之RadioButton

在本节中,我们将会讲解在JavaFX中,RadioButton的使用。RadioButton可以选中和取消选中,并且多个RadioButton可以放入一个Group。当然,它必须要与ToggleButton区分开来,因为在同一个Group中的ToggleButton都可以成为没有选中的状态,而RadioButton则不行。

创建RadioButton

//包含一个空Label的RadioButton
RadioButton rb1 = new RadioButton();
//设置文本内容
rb1.setText("Home");
//包含指定文本内容的RadioButton
RadioButton rb2 = new RadioButton("Calendar");

对于RadioButton,我们可以使用setSelected来使它选中。通过isSelected方法来判断它是否被选中。

另外,由于RadioButton继承与javafx.scene.control.Labeled,所以其实RadioButton不仅仅可以指定文本,也可以指定图片。

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

将RadioButton加入Group

将RadioButton加入同一个Group,我们可以在多个选项中只允许选中一个。

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的事件

在JavaFX中,我们通过监听Property来进行事件的监听。

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

我们通过监听Group中的选项的改变,来更改icon控件中的图片。

UserData用于存储少量的数据,便于在选中事件中根据不同的RadioButton读取不同的数据做操作。

为RadioButton聚焦

在一个Group中,通常是第一个RadioButton默认获取焦点,即便你将第二个RadioButton设置为选中,也只能得到下面这个结果:

这样,我们需要通过requestFocus()来请求焦点。

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

可以得到如下结果:

发表评论

电子邮件地址不会被公开。