2016-07-23 29 views
4

我是tornadoFX的新手,我不知道如何設置PrimaryStage或Scene屬性,如場景高度或寬度或PrimaryStage模態。 請幫幫我。在TornadoFX中設置PrimaryStage或Scene屬性的方法

UPDATE

我想設置場景的高度和寬度,請看下面的例子:

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")) 
    } 
} 
+1

快速提示:標籤與「tornadofx」和一些TornadoFX團隊成員將立即通知你的問題你的問題:) –

+0

@EdvinSyse謝謝你的回答,你是對的,但我無法創建「tornadofx」標籤(我找不到這個標籤,並且因爲我的聲望而無法創建新標籤)。 – mojtab23

+0

啊,看起來我們有一個標籤,但它從來沒有被使用,所以它可能被刪除。我會看到關於恢復。謝謝:) –

回答

6

如果你不想讓主視圖決定了初始場景大小,您可以覆蓋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: View) = Scene(view.root, 800.0, 600.0) 

最終的結果將是相同的,所以你可以只保留代碼雖然在第一個例子中。

1

你一定要檢查出TornadoFX Guide。這是TornadoFX入門的好資源。

要回答您的問題,您可以在視圖的根目錄中設置大小。這應該做你想做的(usning TornadoFX的生成器模式):

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

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

    init { 
     with (root) { 
      prefWidth = 800.0 
      prefHeight = 600.0 
      label("My label") 
     } 
    } 
} 

另一種選擇是使用type safe stylesheets

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

    init { 
     importStylesheet(Style::class) 
    } 
} 

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

    init { 
     with (root) { 
      label("My label") 
     } 
    } 
} 

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

類型安全的樣式表的好處是你可以使用不同的單位(你可以設置就像輕鬆地說prefHeight = 10.cmprefWidth = 5.inches)。它基本上可以做任何CSS可以做的事情,但是更方便,更強大,並且(顧名思義)類型安全。

聲明:我參與設計和構建TornadoFX的類型安全樣式表系統。

+1

謝謝@ruckus,但我想找到如何設置'Scene'或'Stage'屬性,而不是像'Node'或'Parent'這樣的子節點,我會用更好的示例更新我的問題。 – mojtab23

+1

在這種情況下,@edvin正是你想要的。 –