在这一节中,我们将会学习ChoiceBox的使用方法。
ChoiceBox也是很常用的UI控件,用于在多个选项中进行选择。
1.创建ChoiceBox
ChoiceBox cb = new ChoiceBox(FXCollections.observableArrayList(
"First", "Second", "Third")
);
FXCollections按照官方说明是1:1复制的java.util.collections的方法,也是用于创建集合的。
运行效果如下:
2.创建带有文本和分割线的ChoickBox
ChoiceBox cb = new ChoiceBox();
cb.setItems(FXCollections.observableArrayList(
"New Document", "Open ",
new Separator(), "Save", "Save as")
);
Separator也是一个JavaFX控件,主要是分割线的作用。
默认的时候Separator是横向分割线,当然,也可以设置为纵向分割线。
运行效果如下:
3.ChoickBox的选择事件处理
对于控件来说,事件处理始终是最重要的一部分。
当然控件的事件还是按照我之前说的属性机制来进行监听,如下所示:
final String[] fruits = new String[]{"Hello,Apple", "Hello Banana","Hello,Orange"};
final Label label = new Label();
final ChoiceBox cb = new ChoiceBox(FXCollections.observableArrayList("Apple", "Banana", "Orange"));
cb.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue extends Number> observable, Number oldValue, Number newValue) {
label.setText(fruits[newValue.intValue()]);
}
});
同样的,我们通过监听ChoiceBox的selectedIndex属性来进行事件处理,将Label的文本更改为fruits数组中的内容。
运行如下:
4.应用提示文本
Tooltip是提示文本,可以很轻松的应用到各种控件上。
如下:
cb.setTooltip(new Tooltip("Select the fruit"));
当鼠标移动到控件上时,就会显示这个提示文本了。
运行如下:
那么这一节就到此为止了,有兴趣的朋友可以继续关注我的博客,谢谢。
文章评论
你好,我用的sceneBuilder去添加的choiceBox,如何初始化下拉的值呢?
@匿名 SceneBuilder创建的控件,可以在代码中查找到相应的控件再使用setItems来填充数据,你可以看一下我的这篇文章:http://www.wingmei.cn/2014/10/25/从零开始学习javafx5-fxcontroller详解/
:oops:
@匿名
这里的addListenter()的方式,我照着用了一直报错。。。最后看了其他人用的lambda表达式,解决了
List goods=goodsUtil.goods_select(null);
String[] s=new String[goods.size()];
int i;
for(i=0;i{
goodsField.setText(s[newv.intValue()]);
});
@maker 这里代码显示有问题。。.addListener((ov,oldv,newv)->{
goodsField.setText(s[newv.intValue()]);
});
@maker 常规的方式和lambda的方式都是可以用的,由于文章写的比较早,JavaFX进行了更新,我刚试了一下,现在变成了new ChangeListener< Number >(),增加了泛型,这样就可以编译通过了。使用Intellij编辑器,会自动提示你可以更改为lambda表达式,但原来的实现方法不需要变动。