Jmenu bar... [resolvido]

Gente,

estou com um JMenuBar e queria que os componentes que tenham submenus ‘expandissem’ ao passar o mouse em cima… Fiz isso utilizando:

    private void menu_CadastrarMouseEntered(java.awt.event.MouseEvent evt) {                                            
          menu_Cadastrar.setPopupMenuVisible(true);
    }        

e claro que também tive que fazer o inverso, ao retirar o mouse, sumir com a janela, si nao ela vai ficar sempre ativa…

    private void menu_CadastrarMouseExited(java.awt.event.MouseEvent evt) {                                            
          menu_Cadastrar.setPopupMenuVisible(false);
    }        

beleza…

o problema é que quando eu tiro o mouse do menu “Cadastrar” e vou descer para um item (por exemplo Clientes), o menu some! kkkkkkkkkk
o que eu faço para ele só sumir “menu_Cadastrar.setPopupMenuVisible(false);” quando eu tirar o mouse do componente inteiro (incluindo os subitens) ???

obrigado!!

Da uma olhada nos exemplos aqui que deve ajuda-lo > http://download.oracle.com/javase/tutorial/uiswing/components/menu.html

eu dei uma pesquisada antes de postar aqui e ja tinha visto esse link, infelizmente ele não atende minhas necessidades,
mesmo asism, obrigado pela resposta!

abraços

Você poderia registrar um MouseMotionListener no JFrame e usar o método getComponentAt(int, int) para descobrir sobre qual componente o mouse está. Então você poderia mostrar o menu de acordo com componente recebido como resultado.

Se você só tem um menu associado a um componente, pode fazer isso diretamente. E quando o mouse se mover, verificar se está sobre o componente desejado e fazê-lo aparecer.
Se for vários menus e componentes, você poderia mantê-los num Map de componentes com seus menus associados.

Na hora que o mouse se move, enquanto ele estiver sobre o menu, você deixa o menu visível. Quando ele sair do menu, verifica se ele está sobre algum componente que tenha menu associado.

Não sei se isso funciona do jeito que pensei, não fiz nenhum teste.
Mas também não sei se é isso que você quer.

Espero ter ajudado um pouco com novas idéias! :wink:

Não tenho certeza se é isso que entendi…posso tar falando bestera…

Mas o que você quer não é um JMenu dentro de outro JMenu?

não, eu tenho o meu menu construido e seus itens e sub itens… por exemplo:

CADASTRO (item do menu)

-Funcionarios (sub item)
-Clientes (sub item)
-Produtos (sub item)

entendeu?
o que eu quero é o seguinte: quando o mouse estiver em cima de ‘cadastro’ ele vai mostrar os subitens (funcionarios clientes e produtos) pro cara escolher… e qndo ele tirar o mouse dali, vai esconder os itens… q nem mostrei no código;;

deu pra entender?

suas ideias são espetaculares, porem nao faço ideia de como bota-las em pratica :frowning:

desculpe, sou noob msmo!

Sério…achu que tou muito lerdo O_O’
Pra mim o que você quer é fazer algo do tipo

[code]JMenu menu1 = new JMenu(“Cadastro”);
JMenuItem item1 = new JMenuItem(“Funcionarios”);
JMenuItem item2 = new JMenuItem(“Clientes”);
JMenuItem item3 = new JMenuItem(“Produtos”);

menu1.add(item1);
menu1.add(item2);
menu1.add(item3);[/code]

Sim leoviniga, isso é o que ele já fez.
O que ele está querendo fazer agora é fazer os submenus aparecerem quando passa o mouse sobre o menu pai. Não é isso d34d_d3v1l?

Eu fiz uns testes aqui e cheguei na seguinte idéia:

  • coloca o setPopupMenuVisible(true) no mouseEntered do menu com submenus:
final JMenu item2 = new JMenu("Valor 2"); 
menu.add(item2);
item2.add(new JMenuItem("Sub valor 1"));
item2.add(new JMenuItem("Sub valor 2"));
item2.add(new JMenuItem("Sub valor 3"));

item2.addMouseListener(new MouseAdapter() {
	@Override
	public void mouseEntered(MouseEvent e) {
		item2.setPopupMenuVisible(true);
	}
});

Depois cria um MouseListener que fecha seu menu quando o mouse entrar no componente:

MouseListener fechaListener = new MouseAdapter() {
	@Override
	public void mouseEntered(MouseEvent e) {
		item2.setPopupMenuVisible(false);
	}
};

Aí associa esse listener no contentPane do frame para que se o usuário sair do menu e for para dentro dos componentes do frame, ele fecha o menu automaticamente:

getContentPane().addMouseListener(fechaListener);

E também, se o usuário for para os outros items do seu menu, é preciso dizer para fechar o menu que foi aberto:

item1.addMouseListener(fechaListener);
item3.addMouseListener(fechaListener);

Nos testes que eu fiz, foi o mais próximo que consegui chegar.
O esquema do MouseMotionListener não funciona porque getComponentAt não retorna o menu quando o mouse estiver sobre ele.
Anexei o código completo para você ver.

Veja se ajuda.

AAAA visola, você é ferrraaaa!! Obrigado, funcionou sim!! vlww msmo!!

abraços!