JavaFX,Unity3D,Android,IOS等技术教程和生活随笔,仅供记录

http://www.wingmei.cn/wp-content/themes/Vtrois-Kratos-e85a527/images/background.jpg

从零开始学习JavaFX(11) 控件篇之ChoiceBox

在这一节中,我们将会学习ChoiceBox的使用方法。

ChoiceBox也是很常用的UI控件,用于在多个选项中进行选择。

1.创建ChoiceBox

ChoiceBox cb = new ChoiceBox(FXCollections.observableArrayList(
    "First", "Second", "Third")
);

FXCollections按照官方说明是1:1复制的java.util.collections的方法,也是用于创建集合的。

运行效果如下:

《从零开始学习JavaFX(11) 控件篇之ChoiceBox》

2.创建带有文本和分割线的ChoickBox

ChoiceBox cb = new ChoiceBox();
cb.setItems(FXCollections.observableArrayList(
    "New Document", "Open ", 
    new Separator(), "Save", "Save as")
);

Separator也是一个JavaFX控件,主要是分割线的作用。

默认的时候Separator是横向分割线,当然,也可以设置为纵向分割线。

运行效果如下:

《从零开始学习JavaFX(11) 控件篇之ChoiceBox》

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 observable, Number oldValue, Number newValue) {
                label.setText(fruits[newValue.intValue()]);
            }
});

同样的,我们通过监听ChoiceBox的selectedIndex属性来进行事件处理,将Label的文本更改为fruits数组中的内容。

运行如下:

《从零开始学习JavaFX(11) 控件篇之ChoiceBox》

4.应用提示文本

Tooltip是提示文本,可以很轻松的应用到各种控件上。

如下:

cb.setTooltip(new Tooltip("Select the fruit"));

当鼠标移动到控件上时,就会显示这个提示文本了。

运行如下:

《从零开始学习JavaFX(11) 控件篇之ChoiceBox》

那么这一节就到此为止了,有兴趣的朋友可以继续关注我的博客,谢谢。

点赞
  1. 匿名说道:

    你好,我用的sceneBuilder去添加的choiceBox,如何初始化下拉的值呢?

    1. wing1314说道:

      SceneBuilder创建的控件,可以在代码中查找到相应的控件再使用setItems来填充数据,你可以看一下我的这篇文章:http://www.wingmei.cn/2014/10/25/从零开始学习javafx5-fxcontroller详解/ :smile:

  2. 匿名说道:

    :oops:

  3. maker说道:

    这里的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()]);
    });

    1. maker说道:

      这里代码显示有问题。。.addListener((ov,oldv,newv)->{
      goodsField.setText(s[newv.intValue()]);
      });

    2. wing1314说道:

      常规的方式和lambda的方式都是可以用的,由于文章写的比较早,JavaFX进行了更新,我刚试了一下,现在变成了new ChangeListener< Number >(),增加了泛型,这样就可以编译通过了。使用Intellij编辑器,会自动提示你可以更改为lambda表达式,但原来的实现方法不需要变动。 :smile:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注