Como descobrir se um JMenu ou JMenuItem tem um evento definido
10 respostas
cardosodario
amigos,
tenho um programa que tem varios JMenu e JMenuItem
apenas alguns destes estão com o evento de acionamento definido
exemplo o JMenu Sair tem o evento definido SairMouseClicked que ao clicar sai do programa
o JMenuItem UtilitariosUsuarios tem o evento definido UtilitariosUsuariosActionPerformed que chama a tela de cadastro
ja o JMenuItem CadastrosClientes não tem evento
eu gostaria que em tempo de execução eu consiga descobrir quais dos varios menus tem o evento definido pois os que ainda não tem ação quero trata-los de forma diferente mas tudo isto em tempo de execução
mas eu não consegui identificar no mls como faço para saber se o JMenu ta chamando alguém, tem alguma ideia?
Dario.
P
Paulo_Amorim
Olá
Não sei se entendi bem…
Teoricamente, se o seu componente não tá programado pra chamar alguém, ele não tem um listener registrado, e portanto mls é um empty array…
Nesse caso o teste é pelo array vazio ou cheio, não?
Até+
cardosodario
também pensei que fosse assim mas ele me retorna valor mesmo quando o menu esta sem evento algum…
dario.
P
Paulo_Amorim
Olá
Quando não tem valor, o que ele retorna??
Vc já tentou exibir os valores do array?
Até+
A
andre2k2
cardosodario:
também pensei que fosse assim mas ele me retorna valor mesmo quando o menu esta sem evento algum…
dario.
Todo componente já vem com alguns listeners, nas entranhas do swing ele cria alguns… nao sei quanto a MouseListeners… mas a melhor forma seria vc extender o JMenuItem, sobrescrever o metodo addMouseListener e com ele controlar se ja foi setado ou nao algum listener… ou vc poderia criar seu proprio método para adicionar mouse listeners para garantir que somente os listeners adicionados por vc sejam “catalogados”… é uma maneira melhor de fazer… eu acho
cardosodario
concordo com você, mas eu não tenho este conhecimento ainda…
outra coisa, por exemplo através do menu item eu crio o evento actionPerformed para chamar uma janela, gostaria que o mesmo botão do toolBar executa-se este mesmo actionPerformed. Até ai tudo bem, sei que seria apenas colocar no evento do botão SairactionPerformed() mas suponha que eu não sei qual o nome do evento mas sei o nome do menu item, gostaria de algo como Sair.fazoquetanomenuitem()…
tem como?
dario
A
andre2k2
cardosodario:
concordo com você, mas eu não tenho este conhecimento ainda…
outra coisa, por exemplo através do menu item eu crio o evento actionPerformed para chamar uma janela, gostaria que o mesmo botão do toolBar executa-se este mesmo actionPerformed. Até ai tudo bem, sei que seria apenas colocar no evento do botão SairactionPerformed() mas suponha que eu não sei qual o nome do evento mas sei o nome do menu item, gostaria de algo como Sair.fazoquetanomenuitem()…
tem como?
dario
Cuidado, estou vendo que vc está usando alguma IDE que desenvolve códigos automaticamente, tavez o NetBeans… o que vc está descrevendo é a maneira como a IDE faz… o que está por tras na verdade é que ela cria uma classe anonima (classe dentro de outra classe) que é um listener e adiciona esse listener ao componente, esse listener entao chama o metodo gerado automaticamente como SairActionPerformed… por favor não confunda em java todo componente precisa de listeners para disparar suas acoes… para que vc mande 2 componentes dispararem a mesma ação basta criar um listener (provavelmente um ActionListener) e adiciona-lo aos dois componentes… estude sobre listeners em java… boa sorte!
cardosodario
perfeito, matou a xarada, to usando o netbeans como IDE.
obrigadão, vou estudar sobre os listeners.
dario.
A
andre2k2
cardosodario:
perfeito, matou a xarada, to usando o netbeans como IDE.
obrigadão, vou estudar sobre os listeners.
dario.
Ok dario… depois q pegar o jeito com os listeners (estude mais afundo ActionListeners para o seu caso) vc verá não são tão complicados quanto parecem, e da pra fazer coisas bem interessantes com eles…
Spool
Não vejo muita coisa boa nesse seu POG.
Porém, tem um método:
getListenerspublic<TextendsEventListener>T[]getListeners(Class<T>listenerType)ReturnsanarrayofalltheobjectscurrentlyregisteredasFooListenersuponthisJComponent.FooListenersareregisteredusingtheaddFooListenermethod.YoucanspecifythelistenerTypeargumentwithaclassliteral,suchasFooListener.class.Forexample,youcanqueryaJComponentcforitsmouselistenerswiththefollowingcode:MouseListener[]mls=(MouseListener[])(c.getListeners(MouseListener.class));Ifnosuchlistenersexist,thismethodreturnsanemptyarray.Overrides:getListenersinclassContainerParameters:listenerType-thetypeoflistenersrequested;thisparametershouldspecifyaninterfacethatdescendsfromjava.util.EventListenerReturns:anarrayofallobjectsregisteredasFooListenersonthiscomponent,oranemptyarrayifnosuchlistenershavebeenaddedThrows:ClassCastException-iflistenerTypedoesn't specify a class or interface that implements java.util.EventListenerSince:1.3SeeAlso:getVetoableChangeListeners(),getAncestorListeners()
que retorna todos os listeners registrados naquele JComponent.
*** Uma breve pesquisada no Google também revelaria isso.