Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sample;
- import com.sun.glass.ui.ClipboardAssistance;
- import javafx.application.Application;
- import javafx.embed.swing.SwingFXUtils;
- import javafx.geometry.Insets;
- import javafx.geometry.Pos;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.Alert;
- import javafx.scene.control.Button;
- import javafx.scene.control.ColorPicker;
- import javafx.scene.control.Label;
- import javafx.scene.effect.BlendMode;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.input.Clipboard;
- import javafx.scene.layout.*;
- import javafx.scene.paint.Color;
- import javafx.scene.shape.Rectangle;
- import javafx.stage.Stage;
- import java.awt.*;
- import java.awt.datatransfer.DataFlavor;
- import java.awt.datatransfer.Transferable;
- import java.awt.datatransfer.UnsupportedFlavorException;
- import java.io.IOException;
- /**
- * A program to test out the differences between the AWT Java Clipboard and the JavaFX Clipboard.
- * <p>
- * Based on the code by crusam: https://stackoverflow.com/q/48932575/5432315
- */
- public class ClipBoardFxAwtComparison extends Application {
- @Override
- public void start(final Stage primaryStage) {
- final BorderPane root = new BorderPane();
- final Group group = new Group();
- final Button awtButton = new Button("AWT");
- awtButton.setOnAction(event -> loadImageFromAWTClipboard(group));
- final Button javaFXButton = new Button("JavaFX");
- javaFXButton.setOnAction(event -> loadImageFromJavaFXClipboard(group));
- root.setCenter(group);
- final BorderPane buttonPane = new BorderPane();
- buttonPane.setLeft(awtButton);
- buttonPane.setCenter(new Label("Copy and image then click a button to paste it."));
- buttonPane.setRight(javaFXButton);
- root.setBottom(buttonPane);
- final ColorPicker colorPicker = new ColorPicker();
- colorPicker.setOnAction(event -> {
- root.setBackground(
- new Background(
- new BackgroundFill(
- colorPicker.getValue(),
- CornerRadii.EMPTY,
- Insets.EMPTY)
- )
- );
- });
- BorderPane.setAlignment(colorPicker, Pos.CENTER);
- root.setTop(colorPicker);
- final Scene scene = new Scene(root, 400, 400);
- primaryStage.setScene(scene);
- primaryStage.show();
- listenToClipboard();
- }
- /**
- * This little bit of magic comes courtesy of Александр Савостьянов: https://stackoverflow.com/a/47550034/5432315
- */
- private void listenToClipboard() {
- Clipboard clipboard = Clipboard.getSystemClipboard();
- new ClipboardAssistance(com.sun.glass.ui.Clipboard.SYSTEM) {
- @Override
- public void contentChanged() {
- System.out.println("System clipboard content changed.");
- System.out.println("Clipboard content types: ");
- clipboard.getContentTypes().forEach(System.out::println);
- System.out.println();
- }
- };
- }
- private void loadImageFromAWTClipboard(final Group group) {
- System.out.println("Adding an image from the JavaFX Clipboard...");
- final Clipboard clipboard = Clipboard.getSystemClipboard();
- try {
- final Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
- if (t != null && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
- final java.awt.image.BufferedImage img = (java.awt.image.BufferedImage) t.getTransferData(DataFlavor.imageFlavor);
- final Image image = SwingFXUtils.toFXImage(img, null);
- setupImageFixingGroup(group, image);
- } else {
- new Alert(Alert.AlertType.INFORMATION, "No image detected on the Clipboard!").show();
- group.getChildren().clear();
- }
- } catch (final UnsupportedFlavorException | IOException e) {
- e.printStackTrace();
- }
- }
- private void loadImageFromJavaFXClipboard(final Group group) {
- System.out.println("Adding an image from the JavaFX Clipboard...");
- final Clipboard clipboard = Clipboard.getSystemClipboard();
- if (clipboard.hasImage()) {
- final Image image = clipboard.getImage();
- setupImageFixingGroup(group, image);
- } else {
- new Alert(Alert.AlertType.INFORMATION, "No image detected on the Clipboard!").show();
- group.getChildren().clear();
- }
- }
- private void setupImageFixingGroup(Group group, Image image) {
- final ImageView view = new ImageView(image);
- view.setBlendMode(BlendMode.LIGHTEN);
- final Rectangle blend = new Rectangle(image.getWidth(), image.getHeight(), Color.BLACK);
- blend.widthProperty().bind(image.widthProperty());
- blend.heightProperty().bind(image.heightProperty());
- group.getChildren().clear();
- group.getChildren().addAll(blend, view);
- }
- public static void main(final String[] args) {
- launch(args);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement