节点快照导致布局问题

时间:2018-02-22 21:22:48

标签: java javafx javafx-8

使用JavaFX 9.0.4我在JavaFX应用程序中嵌入了一些第三方Swing内容。第三方内容已经有自己的首选大小,所以我用StackPane包装它。

但是,当调用node.snapshot()时,会导致SwingNode跳回到首选大小,手动调整窗口大小会使窗口再次填充窗口。

我还发现只有在首次显示没有内容的场景并且稍后添加内容时才会出现这种情况。

这是一个错误吗?我该如何解决它?

以下示例重新创建问题

public class NodeSnapshotFunny extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        SwingNode swingNode = new SwingNode();
        Button button = new Button("Test");
        button.setOnAction(event -> {
            WritableImage image = button.snapshot(null, null);
        });
        StackPane stackPane = new StackPane(swingNode);
        Scene scene = new Scene(stackPane);
        stage.setScene(scene);
        stage.show();
        stackPane.getChildren().add(button);

        SwingUtilities.invokeLater(() -> {
            JPanel jPanel = new JPanel();
            jPanel.setPreferredSize(new Dimension(300, 300));
            jPanel.setBackground(Color.red);
            swingNode.setContent(jPanel);
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
}

1 个答案:

答案 0 :(得分:0)

我已将此作为一个错误提出并且已被接受。见JDK-8198677。显然这是8u40中引入的回归。