使用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);
}
}