何时在没有例外的初始化中调用ListCell的getItem

时间:2015-03-26 18:23:54

标签: javafx javafx-2 javafx-8

关于问题的标题;假设我有一个自定义数据对象

public class Features {
 BooleanProperty message = new SimpleBooleanProperty();
 String name= "Java fx";
 //etc etc
 }

现在当我创建我的ListCell,并在我的自定义单元格的类构造函数中做一些工作,它指向我们的message变量,或者我的dataClass中的任何变量,我得到一个NullPointerException,为什么,因为ListCell' this.getItem();null。像这样

//im in my constructor
BooleanProperty somechangingboolean= new SimpleBooleanProperty(getItem().message);
//that above line results in NPE.

所以你怎么做?因为我试图听取message变量BooleanProperty中发生的变化,我想在ListCell中进行更改,但我的构造函数在设置数据之前计算/计算,可能在{ {1}}或者updateItem(T item, boolean empty) ..我不想在那里调用代码,我也不想添加&&删除听众,指定&&取消像habbit这样的东西..

任何方式摆脱StarEdit()

1 个答案:

答案 0 :(得分:1)

Gosh !!,我刚刚找到解决方案,所以我可以继续发布,对吧?对..答案是在我的itemProperty()上添加一个监听器并在那里发布其余的构造函数代码,很简单,就像这样 - (stackoverflow requirements)

//in my constructor
this.itemProperty().addListener(new ChangeListener<Features>() {

  @Override
  public void changed(ObservableValue<? extends Features> observable,
                 Features oldValue, Features newValue) {
    System.out.println("newvalue set");
    if(newValue != null)                
        somechangingboolean.bind(getItem().message);
        // now im ok, and the rest comes in
    }
});

猜猜它是正确的方式......