通知 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); 
    });
}