System tray, ou ainda, Bandeja do Sistema em bom português, é a área do desktop onde usuários podem acessar programas continuamente em execução. É denominado Taskbar Status Area no Windows, Notification Area, no GNOME, e System Tray, no KDE.
O system tray contém um ou mais tray icons, no Java SE 6, representados pela classe TrayIcon. TrayIcon pode ter imagem, tooltip text, menu popup e vários listeners associados a ele.
TrayIcon in Action
O ModelMat usa a classe TrayIconManager para gerenciar a interação desse software com o system tray do desktop em que está rodando.
public class TrayIconManager {
.....// Única instância dessa classe.
.....private static TrayIconManager trayIconManager;
.....// A estrela desse artigo: o Tray Icon!
.....private static TrayIcon trayIcon;
.....// O ícone que aparecerá no System Tray.
.....private static Image icon;
.....// A "bandeja do sistema".
.....private static SystemTray systemTray;
...../* Action Listener para o Tray Icon.
......* Um action event é disparado quando há um duplo clique no Tray Icon. */
.....private static TrayIconActionListener trayIconActionListener;
.....// O popup menu do tray icon.
.....private static PopupMenu popup;
.....// Itens do popup menu.
.....private static final MenuItem menuTip = new MenuItem();
.....private static final MenuItem menuSobre = new MenuItem();
.....private static final MenuItem menuSair = new MenuItem();
.....private TrayIconManager() {
..........super();
.....}
.....public static void setTrayIcon() {
..........synchronized (TrayIconManager.class) {
...............if (trayIconManager == null) {
....................trayIconManager = new TrayIconManager();
...............}
..........}
..........// Verifica se o sistema suporta system tray.
..........if (SystemTray.isSupported()) {
...............// Obtém system tray.
...............systemTray = SystemTray.getSystemTray();
...............icon = Toolkit.getDefaultToolkit().getImage(
..............................TrayIconManager.class.getResource("md1.gif"));
...............popup = new PopupMenu();
...............// Inicializa tray icon.
...............trayIcon = new TrayIcon(icon, "Double-click to maximize/minimize the software", popup);
...............// O ícone deve se enquadrar na bandeja do sistema.
...............trayIcon.setImageAutoSize(true);
...............// Adiciona um ActionListener ao tray icon.
...............trayIconActionListener = new TrayIconActionListener();
...............trayIcon.addActionListener(trayIconActionListener);
...............// Configura menu popup.
...............menuTip.setLabel("Tip of the Day");
...............menuTip.addActionListener(new ShowTipOfTheDay());
...............popup.add(menuTip);
...............menuSobre.setLabel("About ");
...............menuSobre.addActionListener(new ShowAboutDialog());
...............popup.add(menuSobre);
...............popup.addSeparator();
...............menuSair.setLabel("Exit");
...............menuSair.addActionListener(new ExitApplication());
...............popup.add(menuSair);
...............// Adiciona o tray icon no system tray.
...............try {
....................systemTray.add(trayIcon);
...............} catch (AWTException ex) {
....................ex.printStackTrace();
...............}
..........} else {
...............// Ops! A plataforma não provê suporte para system trays.
...............// Fazer algo aqui, como registrar num arquivo de log.
..........}
.....}
.....private class TrayIconActionListener implements ActionListener {
..........public void actionPerformed(final ActionEvent e) {
...............trayIcon.displayMessage(
..............................Oh my!","You double-clicked the tray icon!", TrayIcon.MessageType.INFO);
..........}
.....}
.....private static class ShowTipOfTheDay implements ActionListener {
..........public void actionPerformed(final ActionEvent e) {
...............TipOfTheDay.show(null, true);
..........}
.....}
.....private static class ShowAboutDialog implements ActionListener {
..........public void actionPerformed(final ActionEvent e) {
...............AboutDialog.showDialog();
..........}
.....}
.....private static class ExitApplication implements ActionListener {
..........public void actionPerformed(final ActionEvent e) {
...............System.exit(0);
..........}
.....}
}
A classe principal do sistema, org.modelmat.main.ModelMat, só precisa chamar TrayIconManager.setTrayIcon() para ter o seu tray icon devidamente configurado no system tray do desktop.
Leitura Recomendada:
Fontes Utilizadas:
Segunda-feira, Fevereiro 26, 2007
Tray Icon para o Seu Aplicativo
Assinar:
Postar comentários (Atom)

0 comentários:
Postar um comentário