Quero criar uma visualização da guia na dica de ferramenta. Para isso, preciso capturar o conteúdo da guia antes que a dica seja mostrada ao usuário. Para isso eu uso Node.snapshot()
o método. O problema é que ele não vê alterações no conteúdo, por exemplo, em arquivos ProgressBar
. Tentei usar métodos applyCss()
e layout()
para redesenhar o nó, mas não ajudou. Este é o meu código:
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);
}
}
E este é o resultado:
Como você vê ProgressBar
o valor mudou, mas não é visto na imagem. Alguém poderia dizer como consertar isso?