ScalaFx 将 ImageView 绑定到自定义枚举
ScalaFx Bind ImageView to custom Enumeration
我刚开始编写 scalafx 应用程序,对绑定有疑问。
我的演示者 class 中有一个带有连接状态的枚举,我想 select 在视图 class 的标签中添加适当的图标。我基本上可以用 javafx 方式创建绑定并设置转换器,每次状态更改时 select 都会适当的 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)
}
查看class:
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)))
}
提前致谢,如有语法错误,我深表歉意 - 英语不是我的母语。
您可以使用 EasyBind or the snapshot (2.0-SNAPSHOT) version of ReactFX 创建绑定。两者都是 Java 库,但它们很容易从 Scala 中使用。这是 EasyBind 方式:
graphic <== EasyBind.map(model.state, stateToImage)
val stateToImage: Function1[DatabaseState.DatabaseState, ImageView] = {
// convert state to ImageView
}
此代码使用从 Scala 的 Function1
到 Java 的 Function
的隐式转换。
您还可以定义从 ScalaFX ObjectProperty
到 EasyBind 的 MonadicObservableValue
的隐式转换,然后上面的第一行可以重写为:
graphic <== model.state.map(stateToImage)
我刚开始编写 scalafx 应用程序,对绑定有疑问。
我的演示者 class 中有一个带有连接状态的枚举,我想 select 在视图 class 的标签中添加适当的图标。我基本上可以用 javafx 方式创建绑定并设置转换器,每次状态更改时 select 都会适当的 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)
}
查看class:
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)))
}
提前致谢,如有语法错误,我深表歉意 - 英语不是我的母语。
您可以使用 EasyBind or the snapshot (2.0-SNAPSHOT) version of ReactFX 创建绑定。两者都是 Java 库,但它们很容易从 Scala 中使用。这是 EasyBind 方式:
graphic <== EasyBind.map(model.state, stateToImage)
val stateToImage: Function1[DatabaseState.DatabaseState, ImageView] = {
// convert state to ImageView
}
此代码使用从 Scala 的 Function1
到 Java 的 Function
的隐式转换。
您还可以定义从 ScalaFX ObjectProperty
到 EasyBind 的 MonadicObservableValue
的隐式转换,然后上面的第一行可以重写为:
graphic <== model.state.map(stateToImage)