javafx 截图

Main.java

import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.geometry.Rectangle2D;
import javafx.scene.Node;
import javafx.scene.Scene;

import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.input.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Popup;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.security.Key;


public class Main extends Application {
    private double x = 0;
    private double y = 0;
    private double screenStartX;
    private double screenStartY;
    private double screenEndX;
    private double screenEndY;
    private HBox hBox;
    Stage primaryStageMain;
    public static void main(String[] args) throws FileNotFoundException {

        launch(Main.class, args);
    }

    public void start(final Stage primaryStage) throws Exception {
 
   
        
        primaryStageMain = primaryStage;
        Button button = new Button("截图");
        button.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {

                show(primaryStage);
            }
        });

        StackPane stackPane = new StackPane();//底层面板
        stackPane.getChildren().add(button);
        Scene scene = new Scene(stackPane);

        scene.setOnMousePressed(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                x = event.getScreenX() - primaryStage.getX();
                y = event.getScreenY() - primaryStage.getY();
            }
        });

        scene.setOnMouseDragged(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                primaryStage.setX(event.getScreenX() - x);
                primaryStage.setY(event.getScreenY() - y);
            }
        });
        KeyCombination keyCombination = KeyCombination.valueOf("ctrl+alt+2");
        Mnemonic mc = new Mnemonic(button, keyCombination);
        scene.addMnemonic(mc);
        scene.setFill(Paint.valueOf("#ffffff00"));
        scene.setFill(Color.TRANSPARENT);
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.setScene(scene);
        primaryStage.setWidth(80);
        primaryStage.setHeight(30);
        Rectangle2D screenRectangle = Screen.getPrimary().getBounds();
        double width = screenRectangle.getWidth();
        double height = screenRectangle.getHeight();

        primaryStage.setAlwaysOnTop(true);
        primaryStage.setX(width-100);
        primaryStage.setY(height-80);
        primaryStage.show();
    }

    public void show(final Stage primaryStage) {
        primaryStage.setIconified(true);

        AnchorPane anchorPane = new AnchorPane();
        anchorPane.setStyle("-fx-background-color: #ffffff22");


        Scene scene = new Scene(anchorPane);
        scene.setFill(Paint.valueOf("#ffffff00"));

        final Stage stage = new Stage();
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setScene(scene);
        stage.setFullScreen(true);
        stage.setFullScreenExitHint("");
        stage.show();

        drag(anchorPane, stage);
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.ESCAPE) {
                    stage.close();
                    primaryStage.setIconified(false);
                }

            }
        });

    }

    public void drag(final AnchorPane anchorPane, final Stage primaryStage) {

        anchorPane.setOnMousePressed(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                anchorPane.getChildren().clear();
                hBox = new HBox();
                hBox.setBackground(null);
                hBox.setBorder(new Border(new BorderStroke(
                        Paint.valueOf("#Cd3700"),
                        BorderStrokeStyle.SOLID
                        , null
                        , new BorderWidths(2)
                )));
                screenStartX = event.getScreenX();
                screenStartY = event.getScreenY();
                anchorPane.getChildren().add(hBox);
                AnchorPane.setLeftAnchor(hBox, screenStartX);
                AnchorPane.setTopAnchor(hBox, screenStartY);
            }
        });
        anchorPane.setOnDragDetected(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                anchorPane.startFullDrag();
            }
        });
        anchorPane.setOnMouseDragOver(new EventHandler<MouseDragEvent>() {
            public void handle(MouseDragEvent event) {
                Label label = new Label();
                label.setAlignment(Pos.CENTER);
                label.setPrefWidth(120);
                label.setPrefHeight(30);
                label.setTextFill(Paint.valueOf("#ffffff"));
                label.setStyle("-fx-background-color: #000000");

                AnchorPane.setLeftAnchor(label, screenStartX);
                AnchorPane.setTopAnchor(label, screenStartY - 30);
                anchorPane.getChildren().add(label);
                double screenX = event.getScreenX();
                double screenY = event.getScreenY();
                double width = screenX - screenStartX;
                double height = screenY - screenStartY;

                hBox.setPrefWidth(width);
                hBox.setPrefHeight(height);
                label.setText((int) width + "x" + (int) height);
            }
        });
        anchorPane.setOnMouseDragExited(new EventHandler<MouseDragEvent>() {
            public void handle(MouseDragEvent event) {
                screenEndX = event.getScreenX();
                screenEndY = event.getScreenY();
                Button button = new Button("确定");
                button.setFont(new Font(16));
                hBox.getChildren().add(button);
                hBox.setAlignment(Pos.BOTTOM_RIGHT);
                button.setOnAction(new EventHandler<ActionEvent>() {
                    public void handle(ActionEvent event) {
                        getScreenImg(primaryStage);
                    }
                });
            }
        });
    }

    private void getScreenImg(Stage primaryStage) {
        primaryStage.close();
        double w = screenEndX - screenStartX;
        double h = screenEndY - screenStartY;
        try {
            Robot robot = new Robot();
            java.awt.Rectangle rectangle = new java.awt.Rectangle((int) screenStartX, (int) screenStartY, (int) w, (int) h);
            BufferedImage screenCapture = robot.createScreenCapture(rectangle);
            WritableImage writableImage = SwingFXUtils.toFXImage(screenCapture, null);

            new DingZhu(new ImageView(writableImage),(int) screenStartX, (int) screenStartY, (int) w, (int) h);
            primaryStageMain.setIconified(false);


        } catch (Exception e) {

        }


    }
}

DingZhu.java

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.stage.StageStyle;



public class DingZhu {
    private double x;
    private double y;
    private ImageView imageView;

    public DingZhu(ImageView image,int px,int py,int pw,int ph){






        this.imageView = image;
        final Stage primaryStage = new Stage();
        StackPane stackPane = new StackPane();//底层面板


        stackPane.setStyle("-fx-background-color: #ffffff00");

        imageView.setPreserveRatio(true);
        imageView.setSmooth(true);
        imageView.setFitWidth(pw);
        imageView.setFitHeight(ph);




        Node rect = new javafx.scene.shape.Rectangle(imageView.getFitWidth()-15,imageView.prefHeight(-1)-15);
        ((javafx.scene.shape.Rectangle) rect).setArcHeight(30);
        ((Rectangle) rect).setArcWidth(30);
        imageView.setClip(rect);
        stackPane.getChildren().add(imageView);
        Scene scene = new Scene(stackPane);




        scene.setOnMousePressed(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                x= event.getScreenX()-primaryStage.getX();
                y = event.getScreenY()-primaryStage.getY();
            }
        });



        scene.setOnMouseDragged(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event) {
                primaryStage.setX(event.getScreenX()-x);
                primaryStage.setY(event.getScreenY()-y);
            }
        });
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            public void handle(KeyEvent event) {
                if (event.getCode() == KeyCode.ESCAPE) {
                    primaryStage.close();

                }

            }
        });

        scene.setFill(javafx.scene.paint.Paint.valueOf("#ffffff00"));
        scene.setFill(Color.TRANSPARENT);

        //目前是这个TRANSPARENT
        System.out.println(StageStyle.TRANSPARENT);
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        //目前是UTILITY
//        primaryStage.initStyle(StageStyle.UTILITY);
        primaryStage.setScene(scene);
        primaryStage.setWidth(pw);
        primaryStage.setHeight(ph);
        primaryStage.setX(px);
        primaryStage.setY(py);
        primaryStage.show();


        primaryStage.setAlwaysOnTop(true);

        System.out.println(123);
    }

}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值