我想在工具提示中创建选项卡预览。为此,我需要在向用户显示工具提示之前捕获选项卡内容。为此我使用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
值发生了变化,但在图像中看不到。有人能说一下如何解决吗?