TornadoFX прозрачный вид - PullRequest
       19

TornadoFX прозрачный вид

0 голосов
/ 29 января 2019

Я хотел бы создать вид (сцена, окно) с частично прозрачным фоном.У меня есть изображение, содержащее альфа-канал

an image containing alpha channel

Я использовал этот вид сцен в JavaFx, где я должен был установить заполнение сцены на ноль и кореньцвет фона узла прозрачный.Я пытался сделать то же самое с TornadoFX:

class NextRoundView : View("Következő kör") {

    override val root = vbox {
        style {
            backgroundColor = multi(Color.TRANSPARENT)
            backgroundImage = multi(URI.create("/common/rope-bg-500x300.png"))
            backgroundRepeat = multi(BackgroundRepeat.NO_REPEAT 
                                  to BackgroundRepeat.NO_REPEAT)
        }
        prefWidth = 500.0
        prefHeight = 300.0

        spacing = 20.0
        padding = insets(50, 20)
        text("A text") {
            font = Font.font(40.0)
            alignment = Pos.CENTER
        }

        button("OK")
        {
            font = Font.font(20.0)
            action {
                close()
            }
        }
        sceneProperty().addListener{ _,_,n ->
            n.fill = null
        }
    }

}

Я называю вид следующим образом:

NextRoundView().apply { 
    openModal(stageStyle = StageStyle.TRANSPARENT, block = true) 
}

Однако сцена еще имеет фон:

enter image description here

Что я пропустил?

1 Ответ

0 голосов
/ 29 января 2019

Вы сделали пару ошибок, которые вызывают это.Прежде всего, вы никогда не должны вручную создавать экземпляры UICompoenents (View, Fragment).Это заставит их пропустить важные обратные вызовы жизненного цикла.Одним из важных обратных вызовов является onDock, который является идеальным местом для манипулирования назначенной сценой.Изменение этих двух проблем, а также очистка некоторого синтаксиса приводит к тому, что этот код успешно делает фон прозрачным:

class MyApp : App(MyView::class)

class MyView : View() {
    override val root = stackpane {
        button("open").action {
            find<NextRoundView>().openModal(stageStyle = StageStyle.TRANSPARENT, block = true)
        }
    }
}

class NextRoundView : View("Következő kör") {
    override val root = vbox {
        style {
            backgroundColor += Color.TRANSPARENT
            backgroundImage += URI.create("/common/rope-bg-500x300.png")
            backgroundRepeat += BackgroundRepeat.NO_REPEAT to BackgroundRepeat.NO_REPEAT
        }
        prefWidth = 500.0
        prefHeight = 300.0

        spacing = 20.0
        padding = insets(50, 20)
        text("A text") {
            font = Font.font(40.0)
            alignment = Pos.CENTER
        }

        button("OK") {
            font = Font.font(20.0)
            action {
                close()
            }
        }
    }

    override fun onDock() {
        currentStage?.scene?.fill = null
    }
}

Вот снимок экрана приложения с внесенными изменениями:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...