Usando JPopupMenu no TrayIcon

0 respostas
samuelcguimaraes

Boa tarde pessoal!

Tenho um TrayIcon na minha aplicação com um MouseListener que abre um JPopupMenu. Eu queria reproduzir o comportamento do PopupMenu (awt) do TrayIcon. Quando clico nos meus JMenuItem o JPopMenu funciona perfeitamente, mas quando clico fora do meu JPopupMenu ele não fecha.

Ta ai o código:
public TrayIcon getTray() {
		// Check the SystemTray support
		if (!SystemTray.isSupported()) {
			MensagemSimplesDeErro.setMensagem("SystemTray não é suportado");
			return null;
		}
		final JPopupMenu popup = new JPopupMenu();
		final TrayIcon trayIcon;

		// Create a popup menu components
		JMenuItem abrirItem = new JMenuItem("Abrir");
		abrirItem.setIcon(new ImageIcon(CarregaImagem
				.getImagem("/imagens/green-ball.png")));
		JMenuItem fecharItem = new JMenuItem("Fechar");
		fecharItem.setIcon(new ImageIcon(CarregaImagem
				.getImagem("/imagens/red-ball.png")));

		// Add components to popup menu
		popup.add(abrirItem);
		popup.addSeparator();
		popup.add(fecharItem);

		trayIcon = new TrayIcon(
				CarregaImagem.getImagem("/imagens/IconeSASCupdate.png"),
				"Gestor de Dados do SASC");
		trayIcon.setImageAutoSize(true);

		trayIcon.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (!e.isPopupTrigger() && e.getButton() == MouseEvent.BUTTON3) {
					popup.setVisible(false);
					popup.setLocation(e.getX() + 5, e.getY() - 65);
					popup.setInvoker(popup);
					popup.setVisible(true);
				} else {
					popup.setVisible(false);
				}
			}
		});

		ActionListener listenerAbrirJanela = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				frame.setVisible(true);
				frame.setExtendedState(JFrame.NORMAL);
			}
		};

		abrirItem.addActionListener(listenerAbrirJanela);
		trayIcon.addActionListener(listenerAbrirJanela);

		fecharItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int retorno = JOptionPane.showConfirmDialog(null,
						"Tem certeza que desejar sair?", "Confirmação",
						JOptionPane.YES_NO_OPTION);
				if (retorno == JOptionPane.YES_OPTION) {
					System.exit(0);
				}
			}
		});

		return trayIcon;
	}

Alguem saberia me ajudar?

Criado 4 de março de 2013
Respostas 0
Participantes 1