⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systemtraytool.java

📁 java下的抓屏工具。。。。............................凑字
💻 JAVA
字号:
package screensnap;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;

public class SystemTrayTool {

    private static Settings settings = Settings.getInstance();
    private Robot robot; // 抓屏机器人
    private Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); // 屏幕大小

    public void initTrayicon() {
        
        try {
            robot = new Robot(); // 初始化机器人
        } catch (AWTException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        // 不支持系统托盘,退出主程序
        if (!SystemTray.isSupported()) {
            JDialog dialog = new JDialog();
            dialog.add(new JLabel("当前系统不支持系统托盘!"));
            dialog.setLocation(screenSize.width - 170, screenSize.height - 60);
            dialog.pack();
            dialog.setVisible(true);
            dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            return;
        }

        SystemTray tray = SystemTray.getSystemTray();
        ImageIcon image = new ImageIcon(SystemTrayTool.class.getResource("/screensnap/qq.gif"));
        PopupMenu menu = new PopupMenu();
        MenuItem catchScreen = new MenuItem("抓屏");
        menu.add(catchScreen);
        catchScreen.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new ScreenFrame(robot, screenSize);
            }
        });

        MenuItem configureMenuItem = new MenuItem("配置");
        menu.add(configureMenuItem);
        configureMenuItem.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                SettingDialog dialog = new SettingDialog(new javax.swing.JFrame(), true);
                dialog.setLocation((screenSize.width - dialog.getWidth()) / 2,
                        (screenSize.height - dialog.getHeight()) / 2);
                dialog.setVisible(true);
            }
        });

        MenuItem exit = new MenuItem("退出");
        menu.add(exit);
        exit.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });

        TrayIcon icon = new TrayIcon(image.getImage(), "双击可抓全屏", menu);
        try {
            tray.add(icon);
        } catch (AWTException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        icon.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                Rectangle rct = new Rectangle(0, 0, screenSize.width,
                        screenSize.height);
                BufferedImage im = robot.createScreenCapture(rct);

                outputImage2SavePlace(im, rct);

                writeImageToFile(im, rct);
            }
        });
    }

    public static void outputImage2SavePlace(BufferedImage im, Rectangle rct) {
        if (Settings.getInstance().getSavePlace() == Settings.FILE) {
            writeImageToFile(im, rct);
        } else {
            setImage2Clipboard(im, rct);
        }
    }
    
    protected static void setImage2Clipboard(final BufferedImage image, final Rectangle rct) {
        Transferable trans = new Transferable() {

            public DataFlavor[] getTransferDataFlavors() {
                return new DataFlavor[]{DataFlavor.imageFlavor};
            }

            public boolean isDataFlavorSupported(DataFlavor flavor) {
                return DataFlavor.imageFlavor.equals(flavor);
            }

            public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
                if (isDataFlavorSupported(flavor)) {
                    return image.getSubimage(rct.x, rct.y, rct.width, rct.height);
                }
                throw new UnsupportedFlavorException(flavor);
            }
        };
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
    }

    public static void writeImageToFile(BufferedImage im, Rectangle rct) {
        try {
            im = im.getSubimage(rct.x, rct.y, rct.width, rct.height);
            String fileName = settings.getOutputFileName();
            ImageIO.write(im, settings.getImageFormatString(), new File(fileName));
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -