JavaFx Снимок содержимого на скрытой вкладке - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть приложение с 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, но без их содержания.

enter image description here

Только после того, как я хотя бы раз активировал их вкладки, показывается содержимое.

enter image description here

Я знал, что узлы должны быть частью сцены, прежде чем можно будет сделать снимок, но, очевидно, это еще не все, и еслиони являются частью неактивной вкладки, некоторые этапы рендеринга выполняются только при отображении вкладки.Есть ли способ заставить это, не требуя, чтобы каждая вкладка стала активной?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...