JavaFx: ChoiceBox,选择器的使用方式

          不管是安卓,ios,web端等等,几乎都需要使用的列表选择。这也是最基本的一些选择器。一些复杂的,自定义的UI选择器其实也是根据这些选择器的本身,重写方法,重新定义它原本规则来显示和传值的。

        那么我们在开发javaFx的时候,这些选择器又该如何使用呢。

        JavaFx也有自己的Api官网的, 上面讲解的比较模糊一些。我这里呢,也是写了很多基础的方法来实现。

        比如我们需要是ChoiceBox这个选择器的使用,它跟我们之前Android,IOS,Web是有很大的不同的。为什么呢?

        拿Android的来说吧,他只需要我们传一个list对象,然后list当中添加实体类就行了,但是javaFx的实体类是不同于这些的。

        我这里总结了一些javaFx用得到的封装类

Long           >          SimpleLongProperty
Integer        >          SimpleIntegerProperty
String         >          SimpleStringProperty
Boolean        >          SimpleBooleanProperty
Doubile        >          SimpleDoubleProperty
Float          >          SimpleFloatProperty

以上是六种基本数据类型的封装方法,当然还有其他的封装类型,比如List,Map,Set等,这里我就不多说了,如果需要的话,大家评论区留言,我会单独写一份关于这些封装类型的用法供大家参考

例如我们需要展示一个列表,供大家选择[加,减,乘,除],

/**
我们需要先封装一个条件类,代码如下

*/

public class MathConvert {

    private SimpleStringProperty name = new SimpleStringProperty();

    private SimpleIntegerProperty value = new SimpleIntegerProperty();

    public MathConvert(String name,int value){
        this.name.set(name);
        this.value.set(value);
    }

    public String getName() {
        return name.get();
    }

    public SimpleStringProperty nameProperty() {
        return name;
    }

    public void setName(String name) {
        this.name.set(name);
    }

    public int getValue() {
        return value.get();
    }

    public SimpleIntegerProperty valueProperty() {
        return value;
    }

    public void setValue(int value) {
        this.value.set(value);
    }

     在我们需要初始化ChoiceBox的位置,初始化一个List,当然啦,JavaFx的的Ui展示的list可不是java基础类的List,我们需要这样写

private ObservableList<MathConvert> mathConvertList = FXCollections.observableArrayList();

   我们对应的ChoiceBox也是需要加上泛型的,那这个泛型就是我们之前定义的MathConvert类了。

 private ChoiceBox<MathConvert> mathChoice;

那我们给ChoiceBox添加值时,按照如下添加就可以了

 //需要new几个对象,加减乘除
        MathConvert add=new MathConvert("加",1);

        MathConvert exce=new MathConvert("减",2);

        MathConvert plus=new MathConvert("乘",3);

        MathConvert dive=new MathConvert("除",4);
        mathConvertList.add(add);
        mathConvertList.add(exce);
        mathConvertList.add(plus);
        mathConvertList.add(dive);
        mathChoice.setItems(mathConvertList);

以上就可以给choicebox初始化添加一个列表值,供前端用户选择了。

但是呢,你重启之后会发现,列表展示的居然是一大串的内存地址,显然不是我们需要的。

这个时候呢。其实啊,我们还得在初始化值之前就先将ChoiceBox进行一次格式化,需要将显示的值给到ui端显示,只有这样才是我们需要的。

  mathChoice.setConverter(new StringConverter<MathConvert>() {
            @Override
            public String toString(MathConvert object) {
                return object.getName();
            }

            @Override
            public MathConvert fromString(String string) {
                //如果有格式化的话,需要重写此方法,按照既定规则显示
                //我这里直接显示名字就可以的了,所以什么都不用填
                System.out.println(string);
                return null;
            }
        });

        按照以上步骤,重新启动一下程序看看结果:

         这就是我们展示的结果啦。

        接下来,我们需要选中某个选项,然后需要拿到选中的值。这个时候该怎么做呢?

        这都是有办法可以做到的

        

         使用这个ChoiceBox选择器设置一下单选model,重新启动之后,你会发现这个getModelItem的回调的index值居然是-1??

        所以一不小心就是会报内存溢出的问题,

 那么最简单的方式就是,把这个设置单选监听放到setItems后面。

 这样的话,就不会存在有内存溢出的风险了。当然拉,还有那种通过网络请求的,那这种的话,你就得在getModelItem方法做个判断了,list不存在值时,就返回空,等待赋值加入之后,就有值了。

以上就是javaFx的ChoiceBox选择的使用方法,有其他想法的朋友可以留言

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌小熊zx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值