【问题标题】:JavaFX window opens in top left corner then jumps to centerJavaFX 窗口在左上角打开,然后跳转到中心
【发布时间】:2019-08-09 08:02:22
【问题描述】:

我正在用 JavaFX 开发一个程序(更具体地说是 FornadoFX,因为我是用 Kotlin 编写的)。我注意到的是,当主窗口最初在左上角打开时,它会跳到中心。

这就是我启动应用程序的方式:launch<MainWindowClass>(args)

这是我的start 方法:

override fun start(stage: Stage) {
    with(stage){
        minWidth = 600.0
        minHeight = 250.0

        //Making it appear in the center
        val screenBounds = Screen.getPrimary().visualBounds
        x = screenBounds.width / 2 - minWidth / 2
        y = screenBounds.height / 2 - minHeight / 2
        scene = Scene(Group(), minWidth, minHeight)

        super.start(this)
    }
}

中心部分(从val screenBounds...scene = ... 的行)基于this 答案。

但是无论他们是否在那里,窗口总是在左上角打开,然后跳转到设置位置,而不是首先显示在那里。

编辑:

这是该错误的最小工作示例:

import javafx.scene.Group
import javafx.scene.Scene
import javafx.stage.Screen
import javafx.stage.Stage
import tornadofx.*

class MainWindow: App(MainView::class) {

    class MainView: View() {
        override val root = label("A window")
    }

    companion object {
        @JvmStatic fun main(args: Array<String>){
            launch<MainWindow>(args)
        }
    }

    override fun start(stage: Stage) {
        with(stage){
            minWidth = 600.0
            minHeight = 250.0

            val screenBounds = Screen.getPrimary().visualBounds
            x = screenBounds.width / 2 - minWidth / 2
            y = screenBounds.height / 2 - minHeight / 2

            scene = Scene(Group(), minWidth, minHeight)

            super.start(this)
        }
    }
}

还有一些关于系统的信息: Java 版本:11 操作系统:Ubuntu 18.04 LTS

【问题讨论】:

  • 请发布一个表现出这种行为的完整可运行应用程序:)
  • @EdvinSyse 我做到了。如您所见,start 方法之外没有太多事情发生
  • 看到这个answer,不是同一个问题,但有相同的根本原因。
  • @JoséPereda 谢谢。这确实解决了问题。谢谢 :) 您可以将其发布在评论中,以便我将其标记为解决方案
  • 好的,我已经添加它作为答案,这样做我注意到问题可能已经解决了,所以也许你可以试试 JavaFX 13-ea+11?

标签: java javafx kotlin tornadofx


【解决方案1】:

Linux 和 JavaFX 11 报告了不同的问题,其中一些具有相同的根本原因:从 GTK 2 到 GTK 3 的更改。

这个answer已经详细解释过了。

至于Windows问题,已经提交here,已经提交fixed,所以可能你可以试试JavaFX 13-ea+11来测试一下。

与此同时,或者如果您必须坚持使用已发布的 JavaFX 11/12 版本,唯一的解决方法是上述答案中建议的解决方法:使用 GTK 2 运行应用程序,可以使用系统属性进行设置:

java -Djdk.gtk.version=2

【讨论】:

  • 谢谢它解决了问题:)。由于 JavaFX 13 仍处于早期访问阶段,我将等到它发布。
  • 很高兴知道,下一个版本只有一个月了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2023-01-12
  • 2013-02-09
  • 1970-01-01
  • 2015-07-15
  • 2021-07-09
  • 2015-05-29
相关资源
最近更新 更多