JavaFX:截图功能

34 篇文章 8 订阅

JavaFX:截图功能

b站up主Aimls的课程:JavaFX开发桌面截图功能
码农教程:基于Javafx的截图功能实现
脚本之家:Java模拟QQ桌面截图功能实现方法
在这里插入图片描述


鼠标事件

JavaFX:鼠标事件

  • 鼠标按下MousePressed
  • 鼠标按下拖拽MouseDragged
  • 鼠标释放MouseReleased
        screenShortPane.setOnMousePressed(screenMouseEvent);
        screenShortPane.setOnMouseDragged(screenMouseEvent);
        screenShortPane.setOnMouseReleased(screenMouseEvent);
// ... ... ... ...
    private EventHandler<MouseEvent> screenMouseEvent = event -> {
        EventType<MouseEvent> eventType = (EventType<MouseEvent>) event.getEventType();
        switch (eventType.getName()) {
            case "MOUSE_PRESSED": {
                // ... ... ... ...
                break;
            }
            case "MOUSE_DRAGGED": {
                // ... ... ... ...
                break;
            }
            case "MOUSE_RELEASED": {
                sceneX_end = event.getSceneX();
                sceneY_end = event.getSceneY();

                hbox.setPrefWidth(sceneX_end - sceneX_start);
                hbox.setPrefHeight(sceneY_end - sceneY_start);

                try {
                    getScreenImg();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            }
            default:
                break;
        }
    };

设置透明背景

  • 缩小前一个stage:setIconified(true)
  • Stage透明属性:setFill(Paint.valueOf("#ffffff03"))、setStyle("-fx-background-color:#B5B5B522")、initStyle(StageStyle.TRANSPARENT)
  • 截图全屏显示区域setFullScreen(true)
    public void loadStage() {
        JxhScreenshot.screenShotStage = new Stage();
        JxhScreenshot.window.setIconified(true);

        FXMLLoader fxmlLoader = new FXMLLoader(PathInfo.getfxml("screenshot.fxml"));
        Scene scene = null;
        try {
            fxmlLoader.setController(ScreenshotController.getInstance());
            scene = new Scene(fxmlLoader.load());
        } catch (IOException e) {
            e.printStackTrace();
        }
        scene.setFill(Paint.valueOf("#ffffff03"));
        screenShortPane.setStyle("-fx-background-color:#B5B5B522");
        JxhScreenshot.screenShotStage.setFullScreenExitHint("");
        JxhScreenshot.screenShotStage.setScene(scene);
        JxhScreenshot.screenShotStage.setFullScreen(true);
        JxhScreenshot.screenShotStage.initStyle(StageStyle.TRANSPARENT);
        JxhScreenshot.screenShotStage.show();

        scene.setOnKeyPressed(keyEvent -> {
            if (keyEvent.getCode() == KeyCode.ESCAPE) {
                JxhScreenshot.screenShotStage.close();
                JxhScreenshot.window.setIconified(false);
            }
        });
    }

截屏使用awt

import java.awt.*;
import java.awt.image.BufferedImage;

Robot robot = new Robot();
Rectangle rec = new Rectangle((int) (sceneX_start + 2), (int) (sceneY_start + 2), (int) (w - 4), (int) (h - 4));
BufferedImage buffimg = robot.createScreenCapture(rec);

BufferedImage转换

img = SwingFXUtils.toFXImage(buffimg, null);

截切板保存

    Clipboard cb = Clipboard.getSystemClipboard();
    ClipboardContent content = new ClipboardContent();
    content.putImage(img);
    cb.setContent(content);

BufferedImage 保存

    ImageIO.write(buffimg, "png", new File("D:/img.png"));

上传到Gitee

(将IntelliJ IDEA项目传上传至Gitee上)
https://gitee.com/xhbruce/xh-desktop-screenshot

新增:代码中设置Controller

  • 代码中动态设置Controller
  • ScreenshotController.getInstance()单例模式通信
    在这里插入图片描述 在这里插入图片描述

新增:关闭窗口弹框

在这里插入图片描述 在这里插入图片描述

新增:弹框关闭选择保存

  • showSaveDialog选择文件保存,或命名文件保存
    在这里插入图片描述
    在这里插入图片描述

新增:高分辨率截屏

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值