【问题标题】:JavaFX creates Alert dialog which is too smallJavaFX 创建的警报对话框太小
【发布时间】:2019-03-15 20:40:42
【问题描述】:

我在 Linux 中的 Java 11 上使用 JavaFX 11.0.1(openSUSE Tumbleweed 20190314 上的 KDE Plasma 5.12.2)来创建一个应该如下所示的Alert 对话框:

但大多数情况下,当 Alert 被创建并显示时,它被渲染得太小,看起来像这样:

大约五分之一的Alert 会正确显示。但其余时间则显示无用的小版本。

用于显示此对话框的代码没有什么异常:

Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Feature absent");
alert.setContentText(
    "Feature \"edit application settings\" has not been finished yet.");
alert.showAndWait();

我还尝试this advice,通过添加以下内容来尝试将大小强制为有用的东西:

alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.getDialogPane().setMinWidth(Region.USE_PREF_SIZE);

但这给出了完全相同的行为。 (请注意,即使为最小宽度和高度设置数值仍然不能解决问题。)

这是 JavaFX 11 中的一个已知错误吗?是否有一些已知的解决方法可以用来确保 Alert 对话框实际上是可读的?

【问题讨论】:

  • 你能试试 JavaFX 12 吗?您可以尝试使用此选项运行吗:java -Djdk.gtk.version=2
  • 我现在坚持使用 Java 11。我只是尝试强制使用 GTK 版本 2,但我使用的是 Maven,并且找不到在运行应用程序时获取要使用的自定义 VM 参数的方法。
  • 您可以继续使用 Java 11,但使用 JavaFX 12,因为它包含一些针对 Linux 的修复。您可以尝试使用 here 中的新 javafx-maven-plugin 而不是 exec 插件,并且可以添加该选项。
  • 我将 JavaFX 版本从 11 更改为 12-ea+14 并重新构建。相同的行为。我只是尝试了javafx-maven-plugin,但它下载了很多我没想到的谷歌包,然后由于模块可见性错误而失败(与我的应用程序的另一个依赖项有关)。
  • JavaFX 12 已经发布。关于插件,依赖项(模块化和非模块化)应由插件管理。你能运行mvn -X clean javafx:run 看看你是否在命令行中发现了问题吗?如果您有任何可以轻松复制的问题,您可以提交here吗?

标签: java javafx alert


【解决方案1】:

在完全相同的问题上已经有一个已知问题reported,它影响了带有 KDE 的 Linux。可以追溯到这个bug,影响JavaFX 10和11。

该问题提供了一种可行的解决方法:

alert.setResizable(true);
alert.onShownProperty().addListener(e -> { 
    Platform.runLater(() -> alert.setResizable(false)); 
});

但这可能会使警报对话框调整大小。

【讨论】:

  • 谢谢,何塞。我们需要这样做并不理想,但至少这种解决方法确实会导致 Alert 对话框每次都显示正确的大小。
  • 确实,正确的方法是修复它。相关问题有一些关于如何做的建议。也许您可以检查它是否有效(构建 OpenJFX 并不难)并报告?这将增加将其推向上游的机会。
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多