Scala 通知javafx内容已更改
这里有一个简单的类,我将它保存在javafxScala 通知javafx内容已更改,scala,javafx,Scala,Javafx,这里有一个简单的类,我将它保存在javafxListView class MyItem { var active: Boolean = true def toString = "Test" } 我为MyItem class MyCell extends ListCell[MyItem] { override def updateItem(item: MyItem, empty: Boolean): Unit = { super.updateItem(item, empt
ListView
class MyItem {
var active: Boolean = true
def toString = "Test"
}
我为MyItem
class MyCell extends ListCell[MyItem] {
override def updateItem(item: MyItem, empty: Boolean): Unit = {
super.updateItem(item, empty)
if(item != null) {
setText(item.toString)
if(item.active) setGraphic(g1) else setGraphic(g2)
}
}
}
我已经在listview上设置了这个选项,但是我希望图形随着活动的
变量一起更改。如果这是swing,我会在更改它时调用重新绘制
,但这不是一个选项
有没有办法通知javafx变更?我是否应该采用不同的结构?尝试将
var激活
设置为BooleanProperty
,并在激活
上添加一个ChangeListener
。如果这是在Java上
修改模型
class MyItem {
private BooleanProperty active;
public MyItem() {
active = new SimpleBooleanProperty();
}
public BooleanProperty activeProperty() {
return active;
}
public void setActive(boolean active) {
this.active.set(active);
}
public boolean isActive() {
return active.get();
}
}
修改更新方法:
super.updateItem(item, empty);
if (item != null) {
setText(item.toString());
item.activeProperty().addListener((observable, oldValue, newValue) -> {
if (newValue) setGraphic(g1);
else setGraphic(g2);
});
}
你需要做的不止这些。如果在先前表示不同的项之后重新使用单元格来表示项,则它仍将侦听旧项(以及新项)。所以你也需要安排删除听众。@Lucas:不客气。但正如@James_D所评论的,您需要确保在向视图显示模型后,必须删除与
BooleanProperty
关联的changelister
。