当前位置: 首页 > 知识库问答 >
问题:

TornadoFX模态对话框不会自动调整高度

齐俊达
2023-03-14

我有一个TornadoFX应用程序,可以打开一个模态对话框。它有文本字段,如果输入无效,则可以显示错误。

问题在于,当显示或隐藏错误时,模态对话框不会自动调整其高度。

这是简化对话框的外观,没有错误,也有错误

下面是一个简化的视图:

class InputView : View("Enter text") {
    private val textProperty = SimpleStringProperty()

    override val root: VBox = vbox {
        label("Enter text below:")

        textfield(textProperty)

        label("Error message") {
            visibleWhen(textProperty.isNotEmpty)
            // This is necessary so that hidden error is really removed, see https://stackoverflow.com/a/28559958/519035
            managedProperty().bind(visibleProperty())
        }

        button("OK")
    }
}

控制器打开它就像

inputView.openModal(owner = primaryStage)

TornadoFX和JavaFX有很多配置,如prefHeight、UsePrefHeights、fitToHeight、maxHeightProperty和vgrow。我和他们玩过,但到目前为止没有运气。

有人能指出正确的方法来自动调整对话框的高度吗?

共有1个答案

江仲渊
2023-03-14

在另一个问题的帮助下,我能够找到一个解决方案。我不得不在有错误的节点上添加以下内容:

visibleProperty().onChange {
    currentWindow?.sizeToScene()
}

最终的简化代码如下所示

class InputView : View("Enter text") {
    private val textProperty = SimpleStringProperty()

    override val root: VBox = vbox {
        label("Enter text below:")

        textfield(textProperty)

        label("Error message") {
            visibleWhen(textProperty.isNotEmpty)

            // This is necessary so that hidden error is really removed, see https://stackoverflow.com/a/28559958/519035
            managedProperty().bind(visibleProperty())
            
            // This is necessary to automatically adjust dialog height when error is shown or hidden
            visibleProperty().onChange {
                currentWindow?.sizeToScene()
            }
        }

        button("OK")
    }
}
 类似资料:
  • 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是 Qt 所 独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。 所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进 行交互,直到该对话框关闭。对于非模 态对话框,当被打开时,用户既可选择和该对话框进 行交互,也可以选择同应用程序的其他窗口交互。 在 Qt

  • 关于文本字段的设置,我有以下内容 isStretchWithOverflow=“true” positiontype=“float” StretchType=“RelativeTotallestObject” 细节带有以下设置: null 谢谢。

  • 问题内容: 现在,我有一个从外部页面读取的jQuery UI弹出对话框。此页面通过flowplayer从另一个具有视频的外部读取。 我正在使用iframe将视频嵌入到第一个视频中: 100%的宽度似乎没问题,但100%的高度无效。有没有解决的办法? 我在哪里以及如何嵌入代码以及ID内容。请任何人帮忙? 问题答案: 如果要使用100%而不是像素值,则必须使用某种JavaScript来动态调整ifra

  • DynamicHeights是一个动态表格元素高度(动态TableViewCell)的例子。实际应用场景在iOS开发中会经常遇到不规律的TableViewCell,往往需要根据内容的多少而动态调整这些Cell的大小。在http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ 中,有详细的解说开发的流程以及这么处理的原因。里面的大

  • 问题内容: 简而言之:有什么方法可以创建非模式JFace对话框?我试图打电话无济于事。如果我没记错的话,这不是摇摆问题- 这是SWT的缺点,还是我只是在滥用小部件? TIA 问题答案: 使用 似乎是惯例。这对您不起作用吗?

  • 5.4.1 非模态对话框的特点 与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。 非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处: 非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置