【问题标题】:Open JavaFX sub window in tiling mode (i3wm)以平铺模式打开 JavaFX 子窗口 (i3wm)
【发布时间】:2018-03-26 16:44:26
【问题描述】:

我尝试编写一个可以打开多个子窗口的 JavaFX 应用程序(TornadoFX,因为我使用的是 kotlin)。在 i3wm 中,每个窗口都应该以平铺模式显示。在其他非平铺窗口管理器上,它应该开始最大化。但目前它总是以浮动模式打开。我认为这可以通过最大化窗口来存档。所以我在两种变体中尝试了以下onDock() 方法。但两种变体都不起作用。

class FileMapFragment : Fragment() {

    val file:Path by param()

    final override val root =
            borderpane {
                ...
            }

    override fun onDock() {
        //Variant 1
        val screen = Screen.getPrimary()
        val bounds = screen.visualBounds

        currentStage?.x = bounds.minX
        currentStage?.y = bounds.minY
        currentStage?.width = bounds.width
        currentStage?.height = bounds.height

        //Variant 2
        currentStage?.isMaximized = true
        currentStage?.isIconified = true
    }
}

此片段由以下代码打开

find<FileMapFragment>(
    mapOf(
        FileMapFragment::file to file
    )
).openWindow()

Variant 1 处于伪全屏模式,但不处于平铺模式。有人知道解决方案吗? (我认为这是一个通用的 JavaFX 问题,与 kotlin/TornadoFX 无关)

【问题讨论】:

  • 请阅读stackoverflow.com/help/mcve并采取相应措施
  • 感谢您指出本网站。当我重写代码以匹配这个标准时,我解决了这个问题。如果有人有类似的问题,我会添加答案。 (并且会记住这篇文章以了解更多问题)
  • 很好,它对你有帮助:))

标签: java javafx kotlin tornadofx


【解决方案1】:

i3 似乎将带有父窗口的窗口视为浮动窗口。要以平铺模式启动窗口(或允许在其他窗口管理器中最小化/最大化),您必须将父窗口设置为空。在此示例中,以下内容将起作用:

find<FileMapFragment>(
    mapOf(
        FileMapFragment::file to file
    )
).openWindow(owner = null)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2020-12-04
    • 2015-07-15
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多