通知 javafx 内容已更改
Notify javafx that contents has changed
这是一个简单的 class,我将其保存在 javafx 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)
}
}
}
我已经在列表视图上设置了它,但我希望图形随 active
变量一起改变。如果这是 swing,我会在更改它时调用 repaint
,但这不是一个选项。
有什么方法可以将更改通知 javafx 吗?我应该以不同的方式构建事物吗?
尝试将 var active
设为 BooleanProperty
并在 active
上添加 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);
});
}
这是一个简单的 class,我将其保存在 javafx 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)
}
}
}
我已经在列表视图上设置了它,但我希望图形随 active
变量一起改变。如果这是 swing,我会在更改它时调用 repaint
,但这不是一个选项。
有什么方法可以将更改通知 javafx 吗?我应该以不同的方式构建事物吗?
尝试将 var active
设为 BooleanProperty
并在 active
上添加 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);
});
}