У меня есть приложение с TabPane.Я хочу создать снимок всех вкладок.Можно было бы подумать, что tab.getContent (). Snapshot (new SnapshotParameters (), null) будет работать.Но это только в том случае, если вкладка была активна раньше.Если нет, то получаются странные эффекты и упущения в зависимости от его содержания.Например, для HTMLEditor я получаю базовый интерфейс редактора, но без содержащегося текста.
Пример кода:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.SnapshotParameters;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.VBox;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;
public class SnapshotTest extends Application {
// Create a tab with an html editor
public Tab createEditorTab(String txt) {
Tab t = new Tab(txt);
HTMLEditor e = new HTMLEditor();
e.setHtmlText(txt);
t.setContent(e);
return t;
}
@Override
public void start(Stage primaryStage) {
TabPane pane = new TabPane();
TabPane imagePane = new TabPane();
Tab snapshotTab = new Tab("Snapshots");
Button b = new Button("Take Snapshots");
b.setOnAction((e)-> {
imagePane.getTabs().clear();
for (int i=1;i<pane.getTabs().size();i++) {
Tab t = pane.getTabs().get(i);
WritableImage imageView = t.getContent().snapshot(new SnapshotParameters(), null);
Tab imageTab = new Tab("Snapshot of "+t.getText());
ImageView v = new ImageView();
v.setImage(imageView);
imageTab.setContent(v);
imagePane.getTabs().add(imageTab);
}
});
VBox box = new VBox();
box.getChildren().addAll(b,imagePane);
snapshotTab.setContent(box);
pane.getTabs().addAll(snapshotTab,
createEditorTab("Tab 1"),
createEditorTab("Tab 2"));
VBox root = new VBox();
root.getChildren().addAll(pane);
root.setMinSize(300, 400);
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Когда я нажимаю «Сделать снимки», я получаю изображенияHTMLEditors, но без их содержания.
Только после того, как я хотя бы раз активировал их вкладки, показывается содержимое.
Я знал, что узлы должны быть частью сцены, прежде чем можно будет сделать снимок, но, очевидно, это еще не все, и еслиони являются частью неактивной вкладки, некоторые этапы рендеринга выполняются только при отображении вкладки.Есть ли способ заставить это, не требуя, чтобы каждая вкладка стала активной?