2016-11-11 2 views
0

Es wurde versucht, die Methode snapshot von JavaFX StackPane zu verwenden, um ein "Hintergrund" -Element zu erfassen. Ich bin speziell am Hintergrund eines Knotens interessiert (wie der Name schon sagt).JavaFX-Snapshot erfasst keinen Hintergrund

Wenn ich meine Szene mit einem StackPane einrichten, und der Hintergrund buchstäblich ein ImageView unter was ich versuche zu zeigen, dann funktioniert alles gut. Aber wenn ich die intuitivere setBackground-Funktion eines Knotens verwende und versuche, einen Schnappschuss zu erfassen, wird er (der Hintergrund) nicht angezeigt.

Zum Beispiel dies wie erwartet funktioniert, wenn Sie getBackgroundNode().snapshot(new SnapshotParameters(), null) tun:

private Node getBackgroundNode() { 
    ImageView background = new ImageView(new Image("https://www.yamaha-motor.ca/images/pages/products/units/MC/action/2016_FZ_07_2_l.jpg")); 
    Rectangle2D viewport = new Rectangle2D(0, 0, 1080, 720); 
    background.setViewport(viewport); 

    return background; 
} 

jedoch die folgenden Verfahren nicht zeigen Sie mir nicht den Hintergrund, wenn ich die snapshot Methode aufrufen.

private Node getBackgroundNode() { 
    Image background = new Image("https://www.yamaha-motor.ca/images/pages/products/units/mc/action/2016_fz_07_2_l.jpg"); 

    StackPane stack = new StackPane(); 
    stack.setBackground(new Background(new BackgroundImage(background, null, null, null, null))); 

    stack.setPrefSize(1080, 720); 

    return stack; 
} 

Ist das einfach ein Merkmal der snapshot Methode? Ich habe mir SnapshotParameters angesehen und es gibt keine offensichtlichen Einstellungen, die es mir ermöglichen würden, den Hintergrund zu erfassen.

Antwort

0

Die Größe eines StackPane wird normalerweise erst nach dem Layout festgelegt. Daher erstellen Sie eine Momentaufnahme von Node der Größe (0, 0). Ein richtig layouted Node enthält den Hintergrund. Sie können die Größe des StackPane durch den Aufruf resize vor dem Erstellen des Snapshot festlegen:

Node backgroundNode = getBackgroundNode(); 
backgroundNode.resize(1080, 720); 
backgroundNode.snapshot(new SnapshotParameters(), null); 
Verwandte Themen