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文档