从ComboBox中的Object中选择值

时间:2014-03-10 10:21:23

标签: javafx javafx-2 javafx-8

我想要使用此代码编辑Java对象。我想从这个obj.getSizeBetweenMessages()得到的值是10:

ObservableList<Integer> zoptionsm = FXCollections.observableArrayList(
            obj.getSizeBetweenMessages(), 90);
        ComboBox<Integer> zcombom = new ComboBox<>(zoptionsm);
        zcombom.getSelectionModel().select(obj.getSizeBetweenMessages());
        zcombom.setEditable(true);
        gpm.add(zcombom, 1, 1);

由于某种原因,ComboBox为空,并且不显示Object中的值。你能告诉我一些我错的地方吗?

1 个答案:

答案 0 :(得分:2)

如果您的getSizeBetweenMessages()方法返回一个int(不是整数),那么当您将结果传递给FXCollections.observableArrayList(...)zcombom.getSelectionModel().select(...)时,您仍然依赖于自动装箱。在第一种情况下,这是有效的,因为没有适当的observableArrayList(...)方法接受int,但在第二种情况下有一个select(...)方法接受一个int,这是一个被调用的方法。因此,如果getSizeBetweenMessages()返回10,那么您正在尝试选择位置10处的项目(而不是项目10本身),并且由于超出范围,因此不会选择任何内容。

修复方法是手动创建Integer对象:

Integer sizeBetweenMessages = new Integer(obj.getSizeBetweenMessages());
ObservableList<Integer> zoptionsm = FXCollections.observableArrayList(
            sizeBetweenMessages, 90);
        ComboBox<Integer> zcombom = new ComboBox<>(zoptionsm);
        zcombom.getSelectionModel().select(sizeBetweenMessages);
        zcombom.setEditable(true);
        gpm.add(zcombom, 1, 1);