将数据传递给 ScalaFX JFXApp
Pass data to a ScalaFX JFXApp
我在 ScalaFX 中写了一个 GUI,它在单独测试时效果很好。值得一提的事情:
- "real" 应用程序本身已经有一个 main 方法,只有那个方法应该用于启动应用程序,而不是我在扩展 JFXApp 时得到的方法。所以对 JFXApp 的主要方法的调用是从外部手动完成的
- 应该可以向JFXApp传递一个数据结构,所以我加了一个setter
整个启动过程如下所示:
def main(args: Array[String]) {
...
...
JFXGui.setData(data)
JFXGui.main(Array())
}
问题:
- 只要不调用JFX对象的main方法,我就无法绘制数据对象的内容,所以
setData
真的只是一个简单的setter方法。这个想法是 JFXGui
应该在 JFXGui.main
被调用后尽快绘制数据。但是:我如何在 JFXGui
中实现这一点?有没有类似 "onready" 的方法?
- 在上面的代码中,我尝试把对setter的调用放在main方法的调用之后,这样setter就可以触发绘制了。我没有想到的是
JFXGui.main
永远阻塞,因此对 setter 的调用是无法访问的代码。
我该如何解决这个问题?感谢任何帮助,谢谢。
编辑:
JFXGui
是我的 ScalaFX 的名字 UI:
object JFXGui extends JFXApp {
private var data: Data = _
def setData(data: Data) {
this.data = data;
}
// tons of ScalaFX related things which visualize the data object
// ...
}
解决方案 1(重新使用 JFXApp)
Gui
对象不再应该是一个对象,而是一个带有构造函数参数的class。
class Gui(data: Data) extends JFXApp {
//your existing code without the field data and the method setData()
}
在启动中class:
new Gui(data).main(Array())
解决方案 2(自定义初始化)
您不一定要使用 JFXApp
才能 运行 您的应用程序。我建议你看看 JFXApp.main()
and the class AppHelper
的源代码。它们包含约 10 行代码,因此您只需复制它们的源代码并根据您的需要进行定制。
我在 ScalaFX 中写了一个 GUI,它在单独测试时效果很好。值得一提的事情:
- "real" 应用程序本身已经有一个 main 方法,只有那个方法应该用于启动应用程序,而不是我在扩展 JFXApp 时得到的方法。所以对 JFXApp 的主要方法的调用是从外部手动完成的
- 应该可以向JFXApp传递一个数据结构,所以我加了一个setter
整个启动过程如下所示:
def main(args: Array[String]) {
...
...
JFXGui.setData(data)
JFXGui.main(Array())
}
问题:
- 只要不调用JFX对象的main方法,我就无法绘制数据对象的内容,所以
setData
真的只是一个简单的setter方法。这个想法是JFXGui
应该在JFXGui.main
被调用后尽快绘制数据。但是:我如何在JFXGui
中实现这一点?有没有类似 "onready" 的方法? - 在上面的代码中,我尝试把对setter的调用放在main方法的调用之后,这样setter就可以触发绘制了。我没有想到的是
JFXGui.main
永远阻塞,因此对 setter 的调用是无法访问的代码。
我该如何解决这个问题?感谢任何帮助,谢谢。
编辑:
JFXGui
是我的 ScalaFX 的名字 UI:
object JFXGui extends JFXApp {
private var data: Data = _
def setData(data: Data) {
this.data = data;
}
// tons of ScalaFX related things which visualize the data object
// ...
}
解决方案 1(重新使用 JFXApp)
Gui
对象不再应该是一个对象,而是一个带有构造函数参数的class。
class Gui(data: Data) extends JFXApp {
//your existing code without the field data and the method setData()
}
在启动中class:
new Gui(data).main(Array())
解决方案 2(自定义初始化)
您不一定要使用 JFXApp
才能 运行 您的应用程序。我建议你看看 JFXApp.main()
and the class AppHelper
的源代码。它们包含约 10 行代码,因此您只需复制它们的源代码并根据您的需要进行定制。