Olá,
tenho duas dúvidas
A primeira é sobre o jpopupmenu, criei um trayicon e um jpopupmenu para ele. Ao clicar a primeira vez ele funciona perfeitamente mas se eu clico no trayicon de novo, ou seja, o jpopupmenu estava visivel, rola exceção para mim e isso não estou sabendo resolver.
A exceção:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.TrayIcon cannot be cast to java.awt.Component
at javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(Unknown Source)
at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Unknown Source)
at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Unknown Source)
at java.awt.Toolkit.notifyAWTEventListeners(Unknown Source)
at java.awt.TrayIcon.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Estou criando o jpopupmenu desta forma:
[code]/**
- construtor
*/
public TrayIconConstructor() {
this.popupMenu = new JPopupMenu();
Image img =
Toolkit.getDefaultToolkit().getImage(“client/desktop/img/java.gif”);
this.trayIcon = new TrayIcon(img, “5PTray”, null);
createPopUpMenu(popupMenu);
this.trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (!e.isPopupTrigger() && e.getButton() == MouseEvent.BUTTON3) {
popupMenu.setLocation(e.getX(), e.getY());
popupMenu.setInvoker(popupMenu);
popupMenu.setVisible(true);
}
else {
popupMenu.setVisible(false);
}
}
});
}
/**
-
@param popupMenu
*/
private void createPopUpMenu(JPopupMenu popupMenu) {
this.popupMenu = popupMenu;
JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (JOptionPane.showConfirmDialog(null, "Confirm Quit?",
"Quit Message", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
System.exit(0);
}
});
items = new JMenu("Items");
this.popupMenu.add(items);
items.setEnabled(false);
this.popupMenu.addSeparator();
this.popupMenu.add(exit);
this.popupMenu.setLightWeightPopupEnabled(true);
}[/code]
Minha segunda dúvida seria em relação aos items do jpopupmenu. Eu gostaria que ao clicar fora ou o mouse saisse do campo visível dele, ele sumisse fazendo nenhuma ação. Isso não acontece ainda. Tentei colocar um focuslistener mas ao mover o mouse um centímetro o jpopupmenu sumia e não esperava ver se o mouse saiu da parte visível dele. Isso incluiria o menu items que possui submenu com 5 opções.
Como faço isso?
Obrigado a todos pela leitura.