我想在工具提示中创建选项卡预览。为此,我需要在向用户显示工具提示之前捕获选项卡内容。为此我使用Node.snapshot()
方法。问题是它看不到内容的变化,例如ProgressBar
.我尝试使用applyCss()
和layout()
方法来重绘节点,但没有帮助。这是我的代码:
public class JavaFxTest8 extends Application {
@Override
public void start(Stage primaryStage) {
TabPane tabPane = new TabPane();
var button1 = new Button("Capture");
var button2 = new Button("Progress");
ImageView tabPreview = new ImageView();
tabPreview.setFitWidth(200);
tabPreview.setPreserveRatio(true);
Tab tab1 = new Tab("Tab 1", new VBox(tabPreview, button1, button2));
var progressBar = new ProgressBar(0.0);
Tab tab2 = new Tab("Tab 2", new VBox(progressBar));
tabPane.getTabs().addAll(tab1, tab2);
button1.setOnAction(e -> {
SnapshotParameters snapshotParams = new SnapshotParameters();
var tab = tabPane.getTabs().get(1);
((VBox) tab.getContent()).applyCss();
((VBox) tab.getContent()).layout();
Image tabImage = tab.getContent().snapshot(snapshotParams, null);
tabPreview.setImage(tabImage);
});
button2.setOnAction(e -> {
progressBar.setProgress(progressBar.getProgress() + 0.1);
});
StackPane root = new StackPane(tabPane);
Scene scene = new Scene(root, 400, 200);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是结果:
正如您所看到的ProgressBar
值发生了变化,但在图像中看不到。有人能说一下如何解决吗?
可能还有其他一些(更好的)方法来完成此任务,但是将选项卡内容临时放置在另一个场景中并制作另一个场景的快照对我来说很有效。