Wing的小站

  • 首页
  • IT新闻
  • 技术文章
  • 生活随笔
  • 休闲娱乐
  • 个人作品
  • 留言板
  • 关于博主
JavaFX,Unity3D,Android,IOS,技术教程,生活随笔
  1. 首页
  2. 技术文章
  3. 正文

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

2015年6月18日 18873点热度 0人点赞 7条评论

在这一节中,我们将会学习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 observable, Number oldValue, Number newValue) {
                label.setText(fruits[newValue.intValue()]);
            }
});

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

运行如下:

4.应用提示文本

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

如下:

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

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

运行如下:

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

标签: ChoiceBox javafx 从零开始学习JavaFX
最后更新:2017年6月20日

wing1314

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

  • 匿名

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

    2018年7月9日
    回复
    • wing1314

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

      2018年7月10日
      回复
  • 匿名

    :oops:

    2017年9月6日
    回复
    • wing1314

      @匿名 :razz:

      2017年9月26日
      回复
  • 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()]);
    });

    2017年6月18日
    回复
    • maker

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

      2017年6月18日
      回复
    • wing1314

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

      2017年6月20日
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    COPYRIGHT © 2023 Wing的小站. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    鄂ICP备17006951号-1

    42011102000591