我已经实现了一个显示问题的小例子。 我有一个适合其父级宽度的节点。当我开始拖拽时在该节点上放置手势,我创建了节点的快照,并将其设置为拖动视图的图像。
@Override
public void start(Stage stage) throws Exception {
HBox root = new HBox(10);
Label someText = new Label("some text");
someText.prefWidthProperty().bind(root.widthProperty());
someText.setPrefHeight(50);
root.getChildren().add(someText);
root.setOnDragDetected(event -> {
Dragboard db = root.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.put(DataFormat.PLAIN_TEXT, "test");
db.setContent(content);
WritableImage image = root.snapshot(null, null);
db.setDragView(image);
event.consume();
});
Scene scene = new Scene(root);
root.prefWidthProperty().bind(scene.widthProperty());
stage.setTitle("JavaFX snapshot example");
stage.setScene(scene);
stage.show();
}
当我轻轻地增加场景的大小(用鼠标)时,我开始拖动&拖放手势,拖动视图图像具有相同的节点大小。但是,如果我继续增加场景的大小,我就开始拖拽&放下手势,在某些时候拖动视图图像变小。如果我最大化场景以适应屏幕尺寸,则拖动视图图像很小。
问题是为什么。这是一个错误吗?可以采取哪些措施来解决或解决此问题?
请注意,当我添加一些痕迹时,我可以看到image.getWidth()与root.getWidth()相同,这对我来说显然很奇怪。
编辑:转载于Java 8 + macOS 10.12.5,Retina屏幕
编辑2:未在Java 8 + Windows 10平台上重现。
因此,它可能是MacOS平台上的错误,也可能是某些限制,例如拖动视图图像可能具有的最大尺寸。
当然欢迎任何有关根本原因的信息。