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) ???
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!
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.
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;;
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”);
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:
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.