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);
}

}