Menubar de um modelo XML

3 respostas
Y

Eu estou trabalhando em um objeto que cria um JMenuBar baseado em um modelo XML, e dessa forma evitar aquelas chatas e repetitivas linhas de código usado na criação de barras de menu.
O modelo é basicamente este:

<MenuBar>
    <Menu name="*Arquivo">
        <Menu name="*Novo">
            <MenuItem name="Item1" accel="ctrl A" action="Item1Action"/>
            <MenuItem name="Item2" accel="crtl B" action="Item2Action"/>
        </Menu>
        <Separator/>
        <MenuItem name="Exit" action="SairAction"/>
    </Menu>
</MenuBar>

Onde o atributo “action” informa o nome de uma classe que implementa ActionListener e trata o evento do item. O problema é o seguinte se eu tenho uma classe de eventos externa como faço p/ ela agir sobre os estados de um objeto???

3 Respostas

E

Com uma classe tratadora de eventos separada fica meio chato implementar isso…

Quando precisei fazer menus dinâmicos, o que eu fiz foi criar uma action e associá-la direto ao JMenuItem…dessa forma, a tal “tratadora de eventos” é eliminada e o próprio menu item sabe o que fazer quando for clicado.

Y

Um amigo meu usou essa abordagem, mas isso gera uma codificação indesejavel onde vc tem que iteragir com o componente que será criado simultaneamente no arquivo XML, que define a sua aparencia, e no código para o tratamento de eventos. Me parece muito mais natural o uso de XML definir tudo, tenho conseguito associar o objeto tratador de eventos ao item de menu mas associa-lo ao objeto que sefrerá as modificações é bem mais complicado.

E

Concordo com você, um fica muito dependente do outro.

Se você for definir tudo no XML, de toda forma, terá de ter um tratador de eventos único que testará qual é o objeto causador do evento, certo? Acho que a tratadora de eventos ainda fica dependente do XML, com a diferença de isso ser feito pelo nome.

Acho que o complicado dessa situação é que o XML vai guardar informações sobre o menu, mas as ações a serem tomadas, de toda forma, devem ser todas implementadas e guardadas no código-fonte…aí, na minha opinião, acho que o XML terá pouca utilidade, não??

Talvez uma solução utilizando apenas Java para reduzir a codificação tediosa de menus seria a criação de um MenuFactory, no qual você teria métodos como addParentMenu, addItemToMenu, addSeparator e esses tipos de coisa, no qual grande parte do código de construção do menu ficaria na fábrica e você poderia apenas criar Actions para os menus e adicionar essas actions aos menus da fábrica. Já implementei isso uma vez e a classe realmente reduziu o código para criação do menu na aplicação, além de ser uma solução puramente Java…pense nisso :wink:

Criado 15 de maio de 2004
Ultima resposta 16 de mai. de 2004
Respostas 3
Participantes 2