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

como proceder?

Dario Basso Cardoso.

10 Respostas

cardosodario

pois é, a gente inventa cada uma…

eu tentei usar isto esquema já

MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class));

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

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

Olá

Quando não tem valor, o que ele retorna??
Vc já tentou exibir os valores do array?

Até+

A

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 :smiley:

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

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! :smiley:

cardosodario

perfeito, matou a xarada, to usando o netbeans como IDE.

obrigadão, vou estudar sobre os listeners.

dario.

A

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… :smiley:

Spool

Não vejo muita coisa boa nesse seu POG.
Porém, tem um método:

getListeners
public <T extends EventListener> T[] getListeners(Class<T> listenerType)Returns an array of all the objects currently registered as FooListeners upon this JComponent. FooListeners are registered using the addFooListener method. 
You can specify the listenerType argument with a class literal, such as FooListener.class. For example, you can query a JComponent c for its mouse listeners with the following code: 

MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class));If no such listeners exist, this method returns an empty array. 

Overrides:
getListeners in class Container
Parameters:
listenerType - the type of listeners requested; this parameter should specify an interface that descends from java.util.EventListener 
Returns:
an array of all objects registered as FooListeners on this component, or an empty array if no such listeners have been added 
Throws: 
ClassCastException - if listenerType doesn't specify a class or interface that implements java.util.EventListener
Since: 
1.3 
See Also:
getVetoableChangeListeners(), getAncestorListeners()

que retorna todos os listeners registrados naquele JComponent.

*** Uma breve pesquisada no Google também revelaria isso.

Até!

Criado 21 de fevereiro de 2008
Ultima resposta 21 de fev. de 2008
Respostas 10
Participantes 4