12

我是 tornadoFX 的新手,我不知道如何设置 PrimaryStage 或 Scene 属性,例如 Scene 高度或宽度或 PrimaryStage 模态。请帮我。

更新

我想设置场景的高度和宽度,看这个例子:

dependencies {
compile 'no.tornado:tornadofx:1.5.2'
compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.3"
}


import javafx.scene.control.Label
import javafx.scene.layout.VBox
import tornadofx.App
import tornadofx.FX
import tornadofx.View

class Main : App() {
   override val primaryView = MyView::class

   init {
      // this two lines have error ( Val cannot be reassigned. )
      FX.primaryStage.scene.height = 600.0
      FX.primaryStage.scene.width = 800.0
      // or this line causes this exception ( java.lang.NoSuchMethodException )
      FX.primaryStage.isResizable = false
   }

}

class MyView : View() {
   override val root = VBox()

   init {
      root.children.add(Label("My label"))
   }
}
4

2 回答 2

24

如果您不想让主视图决定初始场景大小,您可以覆盖App.start和配置主舞台的尺寸,这将再次决定场景的尺寸:

override fun start(stage: Stage) {
    super.start(stage)
    stage.width = 800.0
    stage.height = 600.0
}

为了让这更简单,TornadoFX 1.5.3 中有一个函数可以让你自己为主视图创建场景:

override fun createPrimaryScene(view: UIComponent) = Scene(view.root, 800.0, 600.0)

最终结果将是相同的,因此您可以保留第一个示例中的代码。

于 2016-07-30T12:02:12.467 回答
10

您绝对应该查看TornadoFX 指南。这是开始使用 TornadoFX 的绝佳资源。

要回答您的问题,您可以在视图的根中设置大小。这应该可以满足您的要求(使用 TornadoFX 的构建器模式):

class Main : App(MyView::class)

class MyView : View() {
    override val root = vbox {
        prefWidth = 800.0
        prefHeight = 600.0

        label("My label")
    }
}

另一种选择是使用类型安全的样式表

class Main : App(MyView::class, Style::class)

class MyView : View() {
    override val root = vbox {
        label("My label")
    }
}

class Style : Stylesheet() {
    init {
        root {
            prefHeight = 600.px
            prefWidth = 800.px
        }
    }
}

类型安全样式表的优点是您可以使用不同的单位(您可以很容易地设置为prefHeight = 10.cmor prefWidth = 5.inches)。它基本上可以做任何 CSS 可以做的事情,但更方便、更强大,并且(顾名思义)类型安全。

免责声明:我参与了 TornadoFX 类型安全样式表系统的设计和构建。

于 2016-07-24T01:10:23.230 回答