lembrando e detalhando o caso...
o código original fazia assim:
_____________________________________________________________________________________________________
class TratadorDoBotaoCriarComponentes extends TratadorDixAbstrato{
public void seDito(EventoSimples evento)
{
if(evento.obterNomeDoEvento().equals("clicado")){
String nomeDoComponente = campoDeTextoEntrada.obterTexto();
ComponenteDix componente = pagina.criarComponente( tipoDoComponente(nomeDoComponente), nomeDoComponente + 1000 * Math.random());
componente.fixarTopo((int) (1000 * Math.random()));
componente.fixarEsquerda((int)(1000 * Math.random()));
valorDoUltimoTextoAdicionado.fixarTexto(nomeDoComponente);
}
}
private TiposDeComponentesDix tipoDoComponente(String nomeComponente)
{
TiposDeComponentesDix tipo = null;
if (nomeComponente.equals("areaDeTexto")) {
tipo = TiposDeComponentesDix.ÁREA_DE_TEXTO;
} else if (nomeComponente.equals("botao")) {
tipo = TiposDeComponentesDix.BOTÃO;
} else if (nomeComponente.equals("botoesDeRadio")) {
tipo = TiposDeComponentesDix.BOTÕES_DE_RÁDIO;
} else if (nomeComponente.equals("caixaDeEscolha")) {
tipo = TiposDeComponentesDix.CAIXA_DE_ESCOLHA;
} else if (nomeComponente.equals("campoDeTexto")) {
tipo = TiposDeComponentesDix.CAMPO_DE_TEXTO;
} else if (nomeComponente.equals("grade")) {
tipo = TiposDeComponentesDix.GRADE;
} else if (nomeComponente.equals("listaDeEscolha")) {
tipo = TiposDeComponentesDix.LISTA_DE_ESCOLHA;
}
return tipo;
}
_____________________________________________________________________________________________________
ele necessitava do mapeamento nessa linha:
_____________________________________________________________________________________________________
ComponenteDix componente = pagina.criarComponente( tipoDoComponente(nomeDoComponente), nomeDoComponente + 1000 * Math.random());
_____________________________________________________________________________________________________
eu fatorei a classe toda para:
_____________________________________________________________________________________________________
class TratadorDoBotaoDeCriar extends TratadorDixAbstrato{
public void seDito(EventoSimples evento)
{
if(evento.obterNomeDoEvento() == CLICADO )
criarComponente(textoDoUsuário.obterTexto());
}
private void criarComponente(String nomeDoComponente) {
pagina.criarComponente(m.get(nomeDoComponente), nomeDoComponente + gerarAleatórioAté1000())
.fixarTopo(gerarAleatórioAté1000())
.fixarEsquerda(gerarAleatórioAté1000());
componenteCriado.fixarTexto(nomeDoComponente);
}
public int gerarAleatórioAté1000(){
return (int) (1000 * Math.random());
}
}
_____________________________________________________________________________________________________
ou seja, a linha em questão ficou bem mais simples (mostrando a intenção, sem detalhes)
criarComponente(textoDoUsuário.obterTexto());
o mapeamento "m" é utilizado agora para criar o componente:
m.get(nomeDoComponente)
O mapeamento eu declarei e criei assim:
_____________________________________________________________________________________________________
private final Map<String,TiposDeComponentesDix> m = new HashMap<String, TiposDeComponentesDix>();
_____________________________________________________________________________________________________
e inicializei no "iniciar" do aplique:
_____________________________________________________________________________________________________
public void iniciar(){
inicializarMapaDeNomes();
botãoDeCriar.adicionarTratadorDeEventos(new TratadorDoBotaoDeCriar());
}
_____________________________________________________________________________________________________
invocando o método:
_____________________________________________________________________________________________________
private void inicializarMapaDeNomes() {
m.put("área de texto", ÁREA_DE_TEXTO);
m.put("botão", BOTÃO);
m.put("campo", CAMPO_DE_TEXTO);
m.put("enlace", ENLACE);
//e assim por diante...
}
_____________________________________________________________________________________________________
pra ver tudo funcionando, entrar na página dix.xml em:
http://telis.edugraf.ufsc.br/apliques/2007/1/melga/CriacaoDinamica/