📄 systemtraytool.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 + -