JavaFX: migawki ze sceny (Scene
) – sposób 1
W JavaFX 14 migawki możemy tworzyć ze sceny (Scene
), z węzła (Node
) oraz z ekranu (Robot
).
W tym wpisie pokazuję pierwszy sposób tworzenia i zapisywania na dysku migawki ze sceny Scene
.
Klasa Listing06c_01a
Ściągnij klasę Listing06c_01a
package rozdzial06c; import javafx.application.Application; import javafx.application.Platform; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Cursor; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.image.WritableImage; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCombination; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; /** * @author Jacek Piechota * <p>Migawka ze sceny {@code Scene} - sposób 1.</p> * <p>Po uruchomieniu klasy i kliknięciu 'Ctrl-C' otrzymamy obrazek</p> * <img src="rys06_01.png" width="300" height="100" alt="Migawka ze sceny"> */ public class Listing06c_01a extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { try { Label label = new Label("Zrzut ekranu po naciśnięciu 'Ctrl+C'"); Circle circle = new Circle(50, 50, 30); circle.setFill(Color.BLUE); HBox root = new HBox(); root.setSpacing(20); root.getChildren().addAll(label, circle); Scene scene = new Scene(root, 410, 200); scene.setCursor(Cursor.DEFAULT); KeyCombination kk = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_DOWN); scene.getAccelerators().put(kk, () -> { WritableImage w = new WritableImage(300, 100); WritableImage wi = scene.snapshot(w); File file = new File("rozdzial06c/src/rozdzial06c/rys06_01.png"); BufferedImage bi = SwingFXUtils.fromFXImage(wi, null); try { ImageIO.write(bi, "png", file); } catch (IOException e) { e.printStackTrace(); } }); stage.setScene(scene); stage.setTitle("Scena"); stage.setOnCloseRequest(e -> Platform.exit()); stage.show(); } catch (Exception e) { e.printStackTrace(); } } }
Po uruchomieniu i kliknięciu CTRL^C zrobimy zrzut ze sceny. Zrzut zostanie zapisany do pliku w folderze, gdzie jest klasa.