ScalaFx将ImageView绑定到自定义枚举

ScalaFx将ImageView绑定到自定义枚举,scala,binding,javafx,scalafx,Scala,Binding,Javafx,Scalafx,我刚开始编写scalafx应用程序,对绑定有一个疑问 我的presenter类中有一个连接状态为的枚举,我想在视图类的label中选择适当的图标。我基本上可以用javafx的方式创建绑定,并设置转换器,每当状态发生变化时,它都会选择适当的ImageView,但可以用ScalaFX的方式吗 我查看了很多scalafx示例,但仍然找不到类似的示例 下面是一些代码: package view import scalafx.beans.property.ObjectProperty class Ma

我刚开始编写scalafx应用程序,对绑定有一个疑问

我的presenter类中有一个连接状态为的枚举,我想在视图类的label中选择适当的图标。我基本上可以用javafx的方式创建绑定,并设置转换器,每当状态发生变化时,它都会选择适当的ImageView,但可以用ScalaFX的方式吗

我查看了很多scalafx示例,但仍然找不到类似的示例

下面是一些代码:

package view

import scalafx.beans.property.ObjectProperty

class MainWindowPresenter {
  object DatabaseState extends  Enumeration {
    type DatabaseState = Value
    val NOT_CONNECTED, IDLE, BUSY, ERROR = Value
  }

  val login = new ObjectProperty[String](this, "login", "awesomeloginname")
  val state = new ObjectProperty[DatabaseState.DatabaseState](this, "state", DatabaseState.ERROR)
}
视图类:

package view

import java.util.concurrent.Callable
import javafx.beans.binding.ObjectBinding

import collection.immutable.HashMap

import javafx.scene.control.SeparatorMenuItem

import scala.util.Random
import scalafx.beans.property.{ObjectProperty}
import scalafx.geometry.{Orientation, Insets, Pos}
import scalafx.scene.control._
import scalafx.scene.image.{ImageView, Image}
import scalafx.scene.layout._

import scalafx.Includes._

class MainWindowView extends BorderPane {
  val model = new MainWindowPresenter

  top = new HBox {
    content = List(
      new Label() {
       graphic <== //somehow select imageview depending on model.state
      }
    )
  }

  private def imageFromResource(name : String) =
    new ImageView(new Image(getClass.getClassLoader.getResourceAsStream(name)))
}
提前感谢您,如果有语法错误,请原谅-英语不是我的母语。

您可以使用或snapshot 2.0-snapshot版本的创建绑定。两者都是Java库,但它们很容易从Scala中使用。这是一个简单的方法:

graphic <== EasyBind.map(model.state, stateToImage)

val stateToImage: Function1[DatabaseState.DatabaseState, ImageView] = {
  // convert state to ImageView
}

谢谢我现在使用的是EasyBind解决方案,但ReactFX看起来更有趣,我想我会在将来的代码中使用它。ReactFX 2.0将吸收EasyBind的所有功能,其中大部分功能已经在快照版本中,但还没有文档记录。因此,是的,我建议将来使用ReactFX。
graphic <== model.state.map(stateToImage)