6 复选框
本章介绍如何在JavaFX应用程序中添加复选框。
虽然复选框看起来与单选按钮相似,但它们不能组合成切换组,以便一次选择多个选项。有关更多信息,请参阅单选按钮和切换按钮章节。
图6-1显示了一个应用程序的屏幕截图,其中使用了三个复选框来启用或禁用应用程序工具栏中的图标。
创建复选框
示例6-1创建了两个简单的复选框。
示例6-1 创建复选框
//没有标题的复选框
CheckBox cb1 = new CheckBox();
//带有字符串标题的复选框
CheckBox cb2 = new CheckBox("第二个");
cb1.setText("第一个");
cb1.setSelected(true);
创建了一个复选框后,可以使用JavaFX API提供的方法对其进行修改。在示例6-1中,setText方法定义了c1复选框的文本标题。将setSelected方法设置为true,以便在应用程序启动时选择cb1复选框。
定义状态
复选框可以被定义或未定义。当它被定义时,可以选择或取消选择它。然而,当复选框未定义时,无法选择或取消选择它。使用CheckBox类的setSelected和setIndeterminate方法的组合来指定复选框的状态。根据复选框的INDETERMINATE和SELECTED属性,表6-1显示了复选框的三种状态。
表6-1 复选框的状态
| 属性值 | 复选框外观 |
|---|---|
|
|
|
|
|
|
|
|
|
当复选框表示可以处于混合状态的UI元素时,您可能需要在应用程序中启用三种状态的复选框,例如“是”,“否”,“不适用”。CheckBox对象的allowIndeterminate属性确定复选框是否应循环显示所有三种状态:选中、未选中和未定义。如果变量为true,则控件将循环显示所有三种状态。如果为false,则控件将循环显示选中和未选中状态。下一节中描述的应用程序构建了三个复选框,并仅启用了两种状态。
设置行为
在示例6-2中的代码片段中,创建了三个复选框,如果选择了复选框,则相应的图标会出现在工具栏中。
示例6-2 设置复选框的行为
final String[] names = new String[]{"安全", "项目", "图表"};
final Image[] images = new Image[names.length];
final ImageView[] icons = new ImageView[names.length];
final CheckBox[] cbs = new CheckBox[names.length];
for (int i = 0; i < names.length; i++) {
final Image image = images[i] =
new Image(getClass().getResourceAsStream(names[i] + ".png"));
final ImageView icon = icons[i] = new ImageView();
final CheckBox cb = cbs[i] = new CheckBox(names[i]);
cb.selectedProperty().addListener(
(ObservableValue<? extends Boolean> ov,
Boolean old_val, Boolean new_val) -> {
icon.setImage(new_val ? image : null);
});
}
names数组使用for循环创建了一个复选框数组和一个相应的图标数组。例如,cbs[0],即第一个复选框,被赋予了"安全"的文本标题。同时,当创建第一个图标的图像时,image[0]接收"安全.png"作为getResourceStream方法的文件名。如果选择了特定的复选框,则将相应的图像分配给图标。如果取消选择复选框,则图标接收null图像,图标不会被渲染。
图6-2显示了一个应用程序,其中选择了安全和图表复选框,取消选择了项目复选框。
相关API文档

