关于问题的标题;假设我有一个自定义数据对象
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()
?
答案 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
}
});
猜猜它是正确的方式......