桌面的系統托盤即當程序最小化時並沒有退出,而是最小化在任務狀態區域。當鼠標點擊那個區域所在的圖標會有提示以及彈出菜單等。
下面使用Java中的SystemTray和TrayIcon類實現系統欄托盤:
public class CPSystemTray {
JFrame parent;//主窗口
CPSystemTray(){
this.parent = null;
}
CPSystemTray(JFrame parent){
this.parent = parent;
}
public void systemTrayInit(){
// 判斷當前系統是否支持系統欄圖標
if (!SystemTray.isSupported()) {
return;
}
try {
String title = "ControlParamApp";
String author = "CS.FJC";
SystemTray sysTray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage(
CPSystemTray.class.getResource("../icons/sysTray.png"));
// 設置系統欄圖標及彈出菜單
TrayIcon trayIcon = new TrayIcon(image, title + "\n" + author, createSysTrayMenu());
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(new SysTrayActionListener());
sysTray.add(trayIcon);
trayIcon.displayMessage(title, author, MessageType.INFO);
} catch (Exception e) {
e.printStackTrace();
}
}
private PopupMenu createSysTrayMenu() {
PopupMenu sysTrayMenu = new PopupMenu();
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
MenuItem openItem = new MenuItem("Open");
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
sysTrayMenu.add(openItem);
sysTrayMenu.addSeparator();
sysTrayMenu.add(exitItem);
return sysTrayMenu;
}
class SysTrayActionListener implements ActionListener {
//系統欄圖標雙擊事件
public void actionPerformed(ActionEvent e) {
if(parent!=null){
parent.setVisible(true);
parent.toFront();
}
}
}
}
效果: