Desenhando telas dinamicamente apartir de um XML

Olá pessoal, estou com problemas. Estou trabalhando um montador de telas apartir de sua descrição em formato XML. Apartir desse XML ele irá montar a tela (JFrame) e todo os outros componentes presentes na mesma, inclusive tabelas e eventos em botões…

o problema está justamente aí… como adicionar esses eventos aos botões dinamicamente. Para melhor entendimento de todos segue abaixo o XML para montagem da tela, o método que cria os botões, um MouseListener e um ESBOÇO de como a função que vai adicionar o evento ao botão poderia (ou deveria) ficar.

Arquivo XML:

<TForm id="frmPrincipal" label="Teste XML - Form Dinâmico" pai="">
	<TEdit id="edtNome" label="Nome do usuario:"  default="João da Silva"/>
	<TEdit id="edtEnd" label="Endereço:" default="Rua XXXXXXXXX"/>
	<TButton id="btnFecha" label="Fechar">
		<Evento tipo="CLICK" action="close"/>
	</TButton>
</TForm>

Método que cria os botões:

    // Cria um JButton setando seus atributos
    public JButton criaButton(String id, String label, int largura, int altura, int pos_x, int pos_y) {  
        JButton button = new JButton(label);  
        button.setName(id);
        button.setHorizontalAlignment(0);
        button.setBounds(pos_x, pos_y, largura, altura); 
        return button;  
    }

MouseListener (evento para fechar a tela):

    MouseListener close = new MouseAdapter() {     
         public void onMouseClicked(MouseEvent evt) {     
              System.exit(0);
         }     
    };

dessa forma se vincula o evento ao botão:

        btn.addMouseListener(evento);

mas gostaria de algo tipo assim, para poder setar o evento ao botão:

    public void eventoBTN(JButton btn, MouseListener evento){
        btn.addMouseListener(evento);
    }

será que alguem pode me ajudar?

agradeço a atenção

não entendi mto bem: vc quer salvar seu listener em xml? é isso?

Ele quer especificar o nome do listener em um XML.

acho que isso depende de como voce faz a leitura do seu xml. tu ta desserializando ele inteiro? o objeto?

Por exemplo, ele poderia indicar, no XML, qual é o nome da classe que implementa a interface MouseListener. Então ele pode obter essa classe por reflection.

Um exemplo:

No seu caso, você tem de instanciar (ou obter uma instância da classe, sei lá o que é melhor no seu caso" br.com.exemplo.MeuMouseListener", atribuir a uma variável do tipo MouseListener, e chamar o método “mouseClicked”.

Obviamente isso é meio chato de configurar, portanto você pode abreviar isso para

Pois eh, aí está o problema… Como fazer isso da melhor maneira possivel?

<TButton id="btnFecha" label="Fechar">
      <Evento tipo="CLICK" action="close"/>
</TButton>

no trecho acima tenho um TIPO (CLICK) que me indica que é um evento de clique do mouse e na ACTION um “close” que indica que a ação será de fechamento… esse é o padrão do XML que recebo…
mas, por exemplo, eu poderia ter mais um button com evento associado, e esse evento poderia ser outro:

<TButton id="btnFecha" label="Fechar">
      <Evento tipo="CLICK" action="qualquer outra ação aqui"/>
</TButton>

o detalhe eh que eu queria algo melhor do que declarar classes “estáticas” no código e fazer um monte de IFs para o caso do tipo ser CLICK, INIT, KEY, etc; e para o caso da action ser CLOSE, chamada a WS, abrir form ou qualquer outra coisa…
isso parece muito estruturada para o meu gosto… nada contra, mas tem que ter um jeito melhor…
Não tem como gerar uma classe tipo “Eventos.getEvento(tipo, action)” para qual eu passaria o TIPO e a ACTION e ela me retornaria o evento

preciso de alguma ideia de como poder fazer isso… como vocês fariam?

ninguem?

Que tal dar uma olhadinha nos fontes do SwiXML?

http://www.swixml.org/