我有一段代码用于截取 JavaFX 中的一个节点:
public BufferedImage getSnapshot(final Node... hideNodes) {
Window window = getScene().getWindow();
Bounds b = localToScene(getBoundsInLocal());
int x = (int) Math.round(window.getX() + getScene().getX() + b.getMinX());
int y = (int) Math.round(window.getY() + getScene().getY() + b.getMinY());
int w = (int) Math.round(b.getWidth());
int h = (int) Math.round(b.getHeight());
try {
Robot robot = new Robot();
for(Node node : hideNodes) {
node.setOpacity(0);
node.getParent().requestLayout();
}
BufferedImage image = robot.createScreenCapture(new java.awt.Rectangle(x, y, w, h));
for(Node node : hideNodes) {
node.setOpacity(1);
node.getParent().requestLayout();
}
return image;
}
catch(AWTException ex) {
return null;
}
}
它有一个转折,那就是它应该在截屏之前隐藏给定的节点(以防它们与节点重叠,这在某些情况下是确定的。)
但是,我一直在寻找一种方法来强制重绘以在截取屏幕截图之前包含不透明度更改 - 我发现的唯一参考是 to requestLayout()
,但那里没有乐趣。
我应该调用什么方法来强制并等待重绘完成?