首页 > 解决方案 > 在 Java 11 下启动时图形未在 JavaFX 中呈现

问题描述

我遇到的问题是 mxGraph 对象在启动时无法正确加载。它需要我单击其中的一个单元格才能显示它,即使那样它也不会显示整个图形,而只是显示被单击的单元格。为了显示所有这些,我必须通过另一个控件刷新图形或在整个图形区域周围拖动一个单元格。

当我最初开发这个时,我正在使用 Java 8,这不是问题。这仅在更新到 Java 11 (OpenJDK) 后才发生。升级到 11 时,其他一切都保持不变,只有更新的依赖项发生了变化。

我将 mxGraphComponent 包装在 SwingNode 内,以便将其放置在 JavaFX 节点内。过去我在 JavaFX 中遇到过 Swing 节点的问题,但我正在使用 SwingUtilities.invokeLater() 方法创建所有 Swing 组件。我正在使用来自 Maven 的 3.9.8.1 版本的 JGraphX,但我也尝试了来自 GitHub 的更新的 4.0.0,但没有成功。

这是我的 MCVE:

public final class Main {

    public static void main(final String[] args) {
        Application.launch(JGraphExample.class);
    }
}

public final class JGraphExample extends Application {

    private mxGraph graph;

    @Override
    public void start(final Stage primaryStage) {
        final SwingNode value = new SwingNode();

        final BorderPane root = new BorderPane();
        root.setCenter(value);
        root.setBottom(createRefreshButton());

        SwingUtilities.invokeLater(() -> value.setContent(buildGraphComponent()));

        primaryStage.setWidth(500);
        primaryStage.setHeight(500);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    private mxGraphComponent buildGraphComponent() {
        graph = buildGraph();

        return new mxGraphComponent(graph);
    }

    private mxGraph buildGraph() {
        final mxGraph graph = new mxGraph();
        graph.insertVertex(graph.getDefaultParent(), "x", "Hello", 100, 100, 100, 100);

        return graph;
    }

    private Button createRefreshButton() {
        final Button refresh = new Button("Refresh");
        refresh.setOnAction(actionEvent -> graph.refresh());

        return refresh;
    }
}

在单击刷新按钮之前,图形将无法正确呈现。Java 8 并非如此,因为它按预期工作。似乎对 11 的更新已经解决了这个问题。

有没有人遇到过这个或有任何想法?提前致谢。

标签: javajavafxjava-11jgraphx

解决方案


推荐阅读