replaceWith()方法的sizeToScene属性可减少窗口的顶部并增加窗口的底部

时间:2019-01-19 18:17:48

标签: tornadofx

我有2个视图:LoginScreen和MainScreen。我使用replaceWith()切换到主屏幕。它们都具有相同的prefHeightprefWidth。问题是当我从LoginScreen转到MainScreen时,窗口的底部会折断并变大,例如30-40px。

这是我的代码:

loginScreen.replaceWith(mainScreen, sizeToScene = true, transition=metroAnimation)

然后我用sizeToScene=false进行了尝试,并且工作了,不再snap花了……但是我注意到另一个问题,MainScreen顶部的30-40px消失了:

sizeToScene=true,其底部越来越大: enter image description here

sizeToScene=false,底部没有增长,但是顶部被吃掉了: enter image description here

我该如何解决,我做错了什么吗?

这是我的主屏幕:

class MainScreen : View("MainScreen") {

private val toolbarLayout: ToolbarLayout by inject()

override val root = borderpane {
    addClass(screen)
    top = toolbarLayout.root
    center = flowpane {
        vgap = 20.0
        hgap = 20.0
        paddingAll = 20
        for (i in 0..14) {
            add(MobileAppGridItemLayout(i))
        }
    }
}

}

这是我的ToolbarLayout

class ToolbarLayout : View() {
override val root = borderpane {
    addClass(PanelStyle.toolbar)
    paddingAll = 20

    left {
        hbox(20) {
            label("MainView") {
                addClass(PanelStyle.titleText)
                textFill = Color.WHITE
            }
        }
    }

    right {
        vbox {
            button("Logout") {
                addClass(toolbarButton)
            }
        }
    }
}}

这是LoginScreen和MainScreen中使用的默认屏幕高度和宽度的样式:

screen {
        prefHeight = 720.px
        prefWidth = 1280.px
}

编辑: 我尝试了replaceWith(),但没有动画,结果如下:

  1. sizeToScene=false时,没有生长的底部和被食用的顶部。
  2. sizeToScene=true时,底部会增加。

1 个答案:

答案 0 :(得分:0)

我认为我发现了问题,这是因为flowpane的项目超出了它们在窗口中的容纳量。我将flawpane添加到scrollpane中,问题已解决。

override val root = borderpane {
    addClass(screen)
    top = toolbarLayout.root
    center = scrollpane {
        isFitToHeight = true
        isFitToWidth = true
        vbarPolicy = ScrollPane.ScrollBarPolicy.AS_NEEDED
        content = flowpane {
            vgap = 20.0
            hgap = 20.0
            padding = insets(20, 40, 20, 40)
            for (i in 0..15) {
                add(MobileAppGridItemLayout(i))
            }
        }
    }
}