Eu fiz uma biblioteca básica para os meus projeto usarem o tray.
Bom, você já colocou para iniciar com o WINDOWS certo?
Você pode fazer assim:
Na inicialização com o WINDOWS, inicie o programa passando um argumento que indique que o mesmo deve iniciar no “tray”. Segue um código de exemplo, onde uso essa biblioteca:
importdiegoqueres.bibliotecas.iconenotray.IconeNoTray;importjavax.swing.*;publicclassJFramePrincipalextendsjavax.swing.JFrame{privateIconeNoTraytrayManager;publicJFramePrincipal(Stringargs[]){initComponents();setIconImage(ICONE.getImage());// inicializando componentes da janela//...//Aqui eu adiciono funções extras no menu TRAY do programafinalMenuItem[]itensExtrasMenu=newMenuItem[1];itensExtrasMenu[0]=newMenuItem("Registrar ponto");itensExtrasMenu[0].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){JFramePrincipal.this.jButtonRegistrarPontoActionPerformed(e);}});trayManager=newIconeNoTray(this,ICONE);trayManager.setBalaoSistemaTitulo("Registro de Ponto");trayManager.setToolTipText("Registro de Ponto");trayManager.setBalaoSistemaDescricao("Sistema de Ponto ocultado. Para desocultar, abra o submenu e clique em Restaurar");trayManager.criarTrayIcon(itensExtrasMenu);//Se o argumento que inicializa o programa é igual a modo_oculto...if(args!=null&&args.length>=1&&args[0].equals("modo_oculto")){try{trayManager.adicionarATray();//inicializa o programa já ocultado na tray}catch(Exceptionex){setVisible(true);ex.printStackTrace();}}else{setVisible(true);}}
W
WalkMan
diego_qmota muito obrigado você esta sendo de grande ajuda.
tentei compilar o seu jar, mas não consigo seria? “C:\S\IconeNoTray.jar” modo_oculto
nesta lina
trayManager=newIconeNoTray(this,ICONE);
como seto um icone?
vlw.
diego_qmota
O jar você não vai conseguir rodar, porquê é uma biblioteca. Você deve adicionar ao CLASSPATH do seu programa.
Daí você usa as classes que estão nele no seu programa (igual ao que eu to fazendo no código de exemplo e roda o código do seu projeto).
Ou seja, esse código você deve inserir no seu programa e alterá-lo, conforme suas necessidades.
Daí você roda o seu programa para ver funcionando:
trayManager=newIconeNoTray(this,ICONE);trayManager.setBalaoSistemaTitulo("Registro de Ponto");trayManager.setToolTipText("Registro de Ponto");trayManager.setBalaoSistemaDescricao("Sistema de Ponto ocultado. Para desocultar, abra o submenu e clique em Restaurar");trayManager.criarTrayIcon(itensExtrasMenu);//Se o argumento que inicializa o programa é igual a modo_oculto...if(args!=null&&args.length>=1&&args[0].equals("modo_oculto")){try{trayManager.adicionarATray();//inicializa o programa já ocultado na tray}catch(Exceptionex){setVisible(true);ex.printStackTrace();}}else{setVisible(true);}
diego_qmota
A varíavel ICONE é um objeto javax.swing.ImageIcon
Você seta dessa forma:
Você indica o caminho da imagem que é o ícone do seu programa no construtor. Nesse caso, a imagem está empacotada no seu programa. Daí eu uso getClass().getResource(…) para chegar no caminho dentro do jar
diego_qmota
Bom…segue o código da classe IconeNoTray
Você pode incluir diretamente no seu programa
/* * IconeNoTray * * Biblioteca auxiliar para minimizar programas para o Tray */packagediegoqueres.bibliotecas.iconenotray;importjava.awt.AWTException;importjava.awt.MenuItem;importjava.awt.PopupMenu;importjava.awt.SystemTray;importjava.awt.TrayIcon;importjava.awt.Window;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjavax.swing.ImageIcon;publicclassIconeNoTray{privatebooleansuportaTrayIcon;privateTrayIcontrayIcon;privateWindowparent;privateString[]textoMenu={"Restaurar","Sair"};privateImageIconicone;privateStringtoolTipText="Programa";privateStringbalaoSistemaTitulo="Meu programa";privateStringbalaoSistemaDescricao="O meu programa está executando";/** * Construtor. Define as características do objeto IconeNoTray * * @param parent Janela pai * @param textoMenu Vetor de 2 Strings onde: * <br><b>Índice 0 - </b> É o texto que deve aparecer no menu do <i>Tray</i> para simbolizar restauração da janela * <br><b>Índice 1 - </b> É o texto que deve aparecer no menu do <i>Tray</i> para simbolizar a saída do programa * @param icone Objeto <i>ImageIcon</i> que será o ícone localizado no Tray * @param toolTipText Texto que irá aparecer ao passar o mouse sobre o ícone no tray * @param balaoSistemaTitulo Balão de Status do Sistema Operacional - Título * @param balaoSistemaDescricao Balão de Status do Sistema Operacional - Descrição * @param itensExtras Itens de menu extras no menu do tray */publicIconeNoTray(Windowparent,String[]textoMenu,ImageIconicone,StringtoolTipText,StringbalaoSistemaTitulo,StringbalaoSistemaDescricao,MenuItem[]itensExtras){this.parent=parent;this.textoMenu=textoMenu;this.icone=icone;this.toolTipText=toolTipText;this.balaoSistemaTitulo=balaoSistemaTitulo;this.balaoSistemaDescricao=balaoSistemaDescricao;setSuportaTrayIcon(true);criarTrayIcon(itensExtras);}/** * Construtor. Define as características do objeto IconeNoTray * * @param parent Janela pai * @param textoMenu Vetor de 2 Strings onde: * <br><b>Índice 0 - </b> É o texto que deve aparecer no menu do <i>Tray</i> para simbolizar restauração da janela * <br><b>Índice 1 - </b> É o texto que deve aparecer no menu do <i>Tray</i> para simbolizar a saída do programa * @param icone Objeto <i>ImageIcon</i> que será o ícone localizado no Tray * @param toolTipText Texto que irá aparecer ao passar o mouse sobre o ícone no tray * @param balaoSistemaTitulo Balão de Status do Sistema Operacional - Título * @param balaoSistemaDescricao Balão de Status do Sistema Operacional - Descrição */publicIconeNoTray(Windowparent,String[]textoMenu,ImageIconicone,StringtoolTipText,StringbalaoSistemaTitulo,StringbalaoSistemaDescricao){this.parent=parent;this.textoMenu=textoMenu;this.icone=icone;this.toolTipText=toolTipText;this.balaoSistemaTitulo=balaoSistemaTitulo;this.balaoSistemaDescricao=balaoSistemaDescricao;setSuportaTrayIcon(true);criarTrayIcon();}/** * Construtor simplificado - define parcialmente as características do objeto * @param parent <i>java.awt.Window</i> Janela pai * @param icone <i>ImageIcon</i> Ícone que será usado no tray */publicIconeNoTray(Windowparent,ImageIconicone){this.parent=parent;this.icone=icone;setSuportaTrayIcon(true);}/** * Método executado na inicialização do objeto, determina as características do ícone que será lançado no tray */publicvoidcriarTrayIcon(){criarTrayIcon(null);}/** * Método executado na inicialização do objeto, determina as características do ícone que será lançado no tray */publicvoidcriarTrayIcon(MenuItem[]itensExtras){SystemTraytray=SystemTray.getSystemTray();// Verifica se o sistema suporta Ãcones na system trayif(!tray.isSupported()){setSuportaTrayIcon(false);return;}//icone q será exibido na bandeja//ImageIcon icon = new ImageIcon("running.png");//setIconImage(icon.getImage());// cria um menu popup para interagir com a aplicação na system trayPopupMenumenu=newPopupMenu();MenuItemitemRestaurar=newMenuItem(textoMenu[0]);itemRestaurar.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){// remove a aplicação da traySystemTray.getSystemTray().remove(trayIcon);parent.setVisible(true);}});menu.add(itemRestaurar);if(itensExtras!=null){for(MenuItemitem:itensExtras){menu.add(item);}}MenuItemitemSair=newMenuItem(textoMenu[1]);itemSair.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){System.exit(0);}});menu.add(itemSair);// cria o ícone e adiciona o menu a eletrayIcon=newTrayIcon(icone.getImage(),toolTipText,menu);trayIcon.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEvente){if(e.getClickCount()==2){SystemTray.getSystemTray().remove(trayIcon);parent.setVisible(true);}}});}publicvoidadicionarATray()throwsAWTException{if(isSuportaTrayIcon()){// esconde a janelaparent.dispose();//adiciona seu programa a systema traySystemTray.getSystemTray().add(trayIcon);// aquele balãozinho que aparece qdo o programa tá lá :)trayIcon.displayMessage(balaoSistemaTitulo,balaoSistemaDescricao,TrayIcon.MessageType.INFO);}}publicvoidsetBalaoSistemaDescricao(StringbalaoSistemaDescricao){this.balaoSistemaDescricao=balaoSistemaDescricao;}publicvoidsetBalaoSistemaTitulo(StringbalaoSistemaTitulo){this.balaoSistemaTitulo=balaoSistemaTitulo;}publicvoidsetIcone(ImageIconicone){this.icone=icone;}publicvoidsetParent(Windowparent){this.parent=parent;}publicvoidsetTextoMenu(String[]textoMenu){this.textoMenu=textoMenu;}publicvoidsetToolTipText(StringtoolTipText){this.toolTipText=toolTipText;}publicvoidsetTrayIcon(TrayIcontrayIcon){this.trayIcon=trayIcon;}publicbooleanisSuportaTrayIcon(){returnsuportaTrayIcon;}publicvoidsetSuportaTrayIcon(booleansuportaTrayIcon){this.suportaTrayIcon=suportaTrayIcon;}}
W
WalkMan
diego_qmota consegui adicionar seu .jar como biblioteca, e bom com todas estas outras dicas consegui fazer o que queria,
nem sei como agradecer, eu aqui querendo um peixe e você já esta fazendo muito mais e me ensinando a pescar!
por fim tenho uma ultima duvida, teria como eu setar na janela, caso o usuario clique em fechar a janela não feche mais sim volte ao tray?
segue meu codigo caso queira dar uma olhada.
packageview;importjava.awt.AWTException;importjava.awt.MenuItem;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ImageIcon;importjavax.swing.JFrame;importdiegoqueres.bibliotecas.iconenotray.IconeNoTray;@SuppressWarnings("serial")publicclassCFronteiraTesteextendsJFrame{staticIconeNoTraytrayManager;publicCFronteiraTeste(){this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setSize(670,600);this.setLocationRelativeTo(null);this.setLayout(null);this.setResizable(false);}publicstaticvoidmain(String[]args){CFronteiraTestef=newCFronteiraTeste();// Aqui eu adiciono funções extras no menu TRAY do programafinalMenuItem[]itensExtrasMenu=newMenuItem[1];itensExtrasMenu[0]=newMenuItem("testeTry");itensExtrasMenu[0].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){System.out.println("asd");;}});trayManager=newIconeNoTray(f,newImageIcon("D:/Desenvolvimento/Java/testeTrayIcon/src/imagemok.png"));trayManager.setBalaoSistemaTitulo("Registro de Ponto");trayManager.setToolTipText("Registro de Ponto");trayManager.setBalaoSistemaDescricao("Sistema de Ponto ocultado. Para desocultar, abra o submenu e clique em Restaurar");trayManager.criarTrayIcon(itensExtrasMenu);try{trayManager.adicionarATray();}catch(AWTExceptione1){e1.printStackTrace();}}}
diego_qmota
Valeu Walkman! Eu quis adicionar essa funcionalidade nos meus programas desktop há um ano atrás e pesquisei sobre o assunto. Nada mais justo que ajudar alguém que está buscando o mesmo resultado, não é mesmo?
E mais uma vez muito obrigado e eu gostaria de lhe sugerir que fizesse um tutorial sobre Tray pelo que pesquisei é algo extremamente escasso.
Ira ser de grande valia para o GUJ.
( Caso o faça me mande o link que vai direto para a minha assinatura! )
Abraços.
diego_qmota
Ok. Só falta arrumar tempo para isso…rs.
Mas fica anotada sua sugestão. Assim que eu puder, eu faço um tutorial sobre o assunto e te comunico.