/* * Copyright 2005 Sun Microsystems, Inc. ALL RIGHTS RESERVED * Use of this software is authorized pursuant to the terms of the * license found at http://developers.sun.com/berkeley_license.html * */packagesystemtray;importjava.awt.*;importjava.awt.event.*;publicclassSystemTrayTest{publicSystemTrayTest(){finalTrayIcontrayIcon;if(SystemTray.isSupported()){SystemTraytray=SystemTray.getSystemTray();Imageimage=Toolkit.getDefaultToolkit().getImage("tray.gif");MouseListenermouseListener=newMouseListener(){publicvoidmouseClicked(MouseEvente){System.out.println("Tray Icon - Mouse clicked!");}publicvoidmouseEntered(MouseEvente){System.out.println("Tray Icon - Mouse entered!");}publicvoidmouseExited(MouseEvente){System.out.println("Tray Icon - Mouse exited!");}publicvoidmousePressed(MouseEvente){System.out.println("Tray Icon - Mouse pressed!");}publicvoidmouseReleased(MouseEvente){System.out.println("Tray Icon - Mouse released!");}};ActionListenerexitListener=newActionListener(){publicvoidactionPerformed(ActionEvente){System.out.println("Exiting...");System.exit(0);}};PopupMenupopup=newPopupMenu();MenuItemdefaultItem=newMenuItem("Exit");defaultItem.addActionListener(exitListener);popup.add(defaultItem);trayIcon=newTrayIcon(image,"Tray Demo",popup);ActionListeneractionListener=newActionListener(){publicvoidactionPerformed(ActionEvente){trayIcon.displayMessage("Action Event","An Action Event Has Been Peformed!",TrayIcon.MessageType.INFO);}};trayIcon.setImageAutoSize(true);trayIcon.addActionListener(actionListener);trayIcon.addMouseListener(mouseListener);// Depending on which Mustang build you have, you may need to uncomment// out the following code to check for an AWTException when you add // an image to the system tray.// try {tray.add(trayIcon);// } catch (AWTException e) {// System.err.println("TrayIcon could not be added.");// }}else{System.err.println("System tray is currently not supported.");}}/** * @param args the command line arguments */publicstaticvoidmain(String[]args){SystemTrayTestmain=newSystemTrayTest();}}
Não é como na figura. Queria que fosse assim" :idea: Both Text and Icon" ícone ao lado do texto.
Propaganda enganosa :roll: ?
T
thingol
Realmente é propaganda enganosa. Não tinha visto isso
G
gilberto_oliveira
Que decepção! :shock:
E eu que tava todo empolgado com esse negócio, apesar de ter lido que ele parece que não funciona no KDE :mrgreen:.
Vou mandar um e-mail pro autor do tutorial informando o problema, talvez já tenham resolvido sei lá. :hunf:
Se consegui posto aqui.
Flw.
Z
zongman
Testei o código do tutorial da SUN e do link(com JPopupMenu) em várias máquinas, inclusive com KDE e funcionou.
Na época utilizei o mesmo link que vc passou(para conseguir um menu com ícone). No fim dos comentários desse link com JPopuMenu tem uma pessoa que fala que resolveu os problemas e passa um link de um fórum em alemão(não testei o código desse link).
Enfrentei problemas com KDE foi utilizando a biblioteca Jdic, o clique do mouse no trayicon fazia o menu apenas piscar.
Na época enviei um email pro tutorial também e até hoje nada, talvez vc tenha mais sorte… :thumbup:
G
gilberto_oliveira
O problema desta solução com JPopupMenu é que o menu não desaparece até que vc clique em alguma opção.
Visitei este fórum tá em alemão mesmo (aí eu no language_tools do google: Alemão >> English >> Portuguese) Tinha lá um moderador mac_systems, que estava fazendo um código lá (bem grandinho por sinal) pra resolver estes problemas … mas que não tinha resolvido ainda. Vi também que haviam comentado sobre ClassCastExceptions que ocorriam mas não entendi bem. E sobre um possível bug (que tava até duplicado na base de dados de bugs do java :D) Mas não encontrei nenhuma pista de como resolver.
Pelo que vi no javadoc desta biblioteca ela contém no pacote org.jdesktop.jdic.tray as Classes
SystemTray - "The SystemTray class represents the System Tray for a desktop."
TrayIcon - "The TrayIcon class represents a tray Icon that can be added to a System tray."
E a classe TrayIcon suporta o JPopupMenu que pode conter ícone e texto.
Isto teoricamente resolve meu problema, vou fazer alguns testes.
O código fonte do programinha da foto está anexo neste post.
A
andreymb
No Gtk (Gnome) consegui resolver usando um Jwinodw. Mas quando fui testar no Windows não funcionou :/.
Segue o fonte do que fiz pro Gtk.
importjava.awt.AWTException;importjava.awt.Image;importjava.awt.SystemTray;importjava.awt.TrayIcon;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPopupMenu;importjavax.swing.JWindow;/** * * @author Andrey M. Bruggemann */publicclassJTrayIcon{privatefinalTrayIcontrayIcon;privateJWindowtrayWindow;privateJPopupMenupopupMenu;privatebooleanvisible;privateJFramemainFrame;publicJTrayIcon(JFramemainFrame,Imageicon)throwsUnsupportedOperationException{if(SystemTray.isSupported()){this.mainFrame=mainFrame;trayIcon=newTrayIcon(icon);trayIcon.setImageAutoSize(true);}else{thrownewUnsupportedOperationException("Tray icon is not supported.");}}publicJTrayIcon(JFramemainFrame,Imageicon,booleanautoSize)throwsUnsupportedOperationException{this(mainFrame,icon);trayIcon.setImageAutoSize(autoSize);}publicJTrayIcon(JFramemainFrame,Imageicon,StringtoolTipText){this(mainFrame,icon);trayIcon.setToolTip(toolTipText);}publicJTrayIcon(JFramemainFrame,Imageicon,StringtoolTipText,JPopupMenupopupMenu){this(mainFrame,icon,toolTipText);trayWindow=newJWindow();trayWindow.add(popupMenu);trayWindow.setVisible(true);this.popupMenu=popupMenu;trayIcon.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){System.out.println(arg0.getActionCommand());}});trayIcon.addMouseListener(newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEventev){if(ev.isPopupTrigger()){JTrayIcon.this.popupMenu.show(trayWindow,ev.getX(),ev.getY());}}});}publicvoidsetVisible(booleanvisible){try{if(visible){SystemTray.getSystemTray().add(trayIcon);}else{SystemTray.getSystemTray().remove(trayIcon);}trayWindow.setVisible(visible);this.visible=visible;}catch(AWTExceptionex){//Nothing to do, this should never occurex.printStackTrace();}}}