2016-07-23 1 views
4

Je suis nouveau sur tornadoFX et je ne sais pas comment configurer les propriétés PrimaryStage ou Scène telles que la hauteur ou la largeur de la scène ou la modalité PrimaryStage. S'il vous plaît aidez-moi.Façon de définir les propriétés PrimaryStage ou Scène dans TornadoFX

MISE À JOUR

Je veux régler la hauteur et la largeur de scène, regardez cet exemple:

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

Astuce: Étiqueter votre question avec 'tornadofx' et certains membres de l'équipe TornadoFX seront immédiatement prévenus de votre question :) –

+0

@EdvinSyse merci de votre réponse, vous avez raison, mais je ne pouvais pas créer 'tornadofx' tag (je n'a pas pu trouver cette étiquette et ne peut pas créer de nouvelle étiquette en raison de ma réputation). – mojtab23

+0

Ah, il semble que nous avions un tag mais il n'a jamais été utilisé, donc il a probablement été supprimé. Je verrai à propos de le récupérer. Merci :) –

Répondre

6

Si vous ne voulez pas laisser la vue principale dictera la taille de la scène initiale, vous pouvez remplacer App.start et configurer les dimensions du stade primaire, qui encore une fois dicteront les dimensions de la scène:

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

pour rendre cela encore plus simple, il y aura une fonction dans TornadoFX 1.5.3 qui vous permettent de créer la scène pour la première vous voir:

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

le résultat final sera le même, de sorte que vous pouvez juste garder la code dans le premier exemple si.

1

Vous devez absolument vérifier la TornadoFX Guide. C'est une excellente ressource pour commencer à TornadoFX.

Pour répondre à votre question, vous pouvez définir la taille à la racine de la vue. Cela devrait faire ce que vous voulez (usning le modèle de constructeur de 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") 
     } 
    } 
} 

Une autre option consiste à utiliser 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 
     } 
    } 
} 

L'avantage du type stylesheet coffre-fort est que vous pouvez utiliser différentes unités (vous pouvez régler aussi simplement dire prefHeight = 10.cm ou prefWidth = 5.inches). Il peut faire tout ce que les CSS peuvent faire, mais il est beaucoup plus pratique, puissant et, comme son nom l'indique, il est sûr. Clause de non-responsabilité: J'ai participé à la conception et à la construction du système de feuilles de style sans danger pour TornadoFX.

+1

Merci @ruckus mais je veux trouver comment paramétrer les propriétés 'Scene' ou' Stage' non pas les enfants comme 'Node's ou' Parent's, je vais mettre à jour ma question avec un meilleur exemple. – mojtab23

+1

Dans ce cas, @edvin a exactement ce que vous voulez. –