通知javafx内容已更改

时间:2015-03-04 11:17:07

标签: scala javafx

这是一个简单的类,我在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 var一起更改。如果这是摆动,我只需在更改时调用repaint,但这不是一个选项。

有没有办法通知javafx变更?我应该以不同的方式构建事物吗?

1 个答案:

答案 0 :(得分:0)

尝试将var active设为BooleanProperty并在ChangeListener上添加active。如果是在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); 
    });
}