下面我们建立一个JFrame的应用,这个应用包含一个TrayIcon对象,当主窗口被关闭时就显示该托盘图标,当点击托盘图标时再显示程序主窗口。
public class MyFrame extends JFrame { private TrayIcon trayIcon;
public MyFrame() { setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (SystemTray.isSupported()) { setVisible(false); minimizeToTray(); } else { System.exit(0); } } }); JPanel root = new JPanel(); JButton exitButton = new JButton("ok"); exitButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); root.add(exitButton); getContentPane().add(root); pack();
initTrayIcon(); }
public void minimizeToTray() { SystemTray tray = SystemTray.getSystemTray(); tray.add(trayIcon); }
private void initTrayIcon() { Image image = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/logo.png")); PopupMenu popup = new PopupMenu(); MenuItem exitItem = new MenuItem("Show"); ActionListener showListener = new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(true); SystemTray.getSystemTray().remove(trayIcon); } }; exitItem.addActionListener(showListener); popup.add(exitItem); trayIcon = new TrayIcon(image, "MyTray", popup); trayIcon.addActionListener(showListener); }
public static void main(String[] args) { MyFrame frame = new MyFrame(); frame.setTitle("MyFrame"); frame.setVisible(true); } } 在initTrayIcon()方法中,我们创建一个TrayIcon,提供文本,图标和一个弹出菜单,同时监听默认事件(Windows下双击托盘图标会触发这个事件)。
在窗口关闭的事件处理方法中,我们隐藏主窗口,然后在SystemTray中添加trayIcon对象。在响应显示主窗口的事件中,我们调用主窗口的显示方法,然后将trayIcon从SystemTray中移去,这样我们就实现了一个最简单的系统托盘的例子。
在JavaLobby上看到一个JTaskPaneGroup例子,利用TaskPane扩充SystemTray的一些界面效果非常不错的。
|