package io.loli.sc.ui.swing; import io.loli.sc.ui.SystemMenu; import java.awt.AWTException; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.JOptionPane; import tray.SystemTrayAdapter; import tray.SystemTrayProvider; import com.apple.eawt.ApplicationAdapter; import com.apple.eawt.ApplicationEvent; public class SwingSystemMenu extends ApplicationAdapter implements SystemMenu { public void handleOpenFile(ApplicationEvent e) { System.out.println("got handleOpenFile event" + " " + e.getFilename()); } public void handleOpenApplication(ApplicationEvent e) { System.out.println("got handleOpenApplication event"); } private PopupMenu generateMenu() { // 创建弹出菜单 PopupMenu popup = new PopupMenu(); // 以下将各个菜单项加入到弹出菜单中 MenuItem full = new MenuItem("全屏截图"); full.addActionListener(listener); popup.add(full); MenuItem select = new MenuItem("选择截图"); select.addActionListener(listener); popup.add(select); MenuItem settings = new MenuItem("设置"); settings.addActionListener(listener); popup.add(settings); MenuItem quit = new MenuItem("退出"); quit.addActionListener(listener); popup.add(quit); return popup; } private ActionListener listener; private TrayIcon trayIcon; @Override public void run() { // 判断该系统是否支持"系统托盘" if (SystemTray.isSupported()) { listener = new ActionListener() { public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand();// 获得托盘的事件或点击图标弹出菜单的菜单项 switch (cmd) { case "全屏截图": SCLauncher.launch("full"); break; case "选择截图": SCLauncher.launch("select"); break; case "设置": SCLauncher.launch("option"); break; case "退出": System.exit(0); } } }; String osname = System.getProperty("os.name").toLowerCase(); if (osname.indexOf("linux") >= 0) { SystemTrayAdapter trayAdapter = new SystemTrayProvider() .getSystemTray(); URL imageUrl = ClassLoader.getSystemResource("icon.png"); String tooltip = "ImageCloud"; trayAdapter.createAndAddTrayIcon(imageUrl, tooltip, this.generateMenu()); } else { SystemTray tray = SystemTray.getSystemTray(); // 系统托盘对象 Image image = null; try { image = ImageIO.read(ClassLoader .getSystemResourceAsStream("icon.png")); } catch (IOException e1) { e1.printStackTrace(); } trayIcon = new TrayIcon(image, "sc-java", this.generateMenu()); trayIcon.setImageAutoSize(true); trayIcon.addActionListener(listener); trayIcon.addMouseMotionListener(new MouseAdapter() { public void mouseDragged(MouseEvent e) { } }); try { tray.add(trayIcon); } catch (AWTException e) { // TODO } } } else { JOptionPane.showMessageDialog(null, "your system do not support system tray"); } } }