Método para buscar valores dos componentes de uma tela para salva-los em um objeto

8 respostas
Jose111

Então eu tenho na minha aplicação o seguinte método…

private Exame componenteParaObjeto() {

		Exame ex = new Exame();
		ex.setCodigo(Integer.parseInt(ex.testaValor(jTextFieldCodFm.getText())));
		ex.setAbdomemFg(jTextFieldAbdomemFg.getText());
		ex.setAbortoFpn(jTextFieldAbortoFpn.getText());
		ex.setAchadosAlteradosFpn(jTextFieldAchadosAlteradosFpn.getText());
		ex.setAfFg(jTextFieldAfFg.getText());
		ex.setAFg(jTextFieldAFg.getText());
		ex.setAguardandoFm(jCheckBoxAguardandoFm.isSelected());
		ex.setAlcoolFpn(jRadioButtonAlcoolFpn.isSelected());
		ex.setAltFg(jTextFieldAltFg.getText());
		ex.setAmamentacaoFg(jTextFieldAmamentacaoFg.getText());
		ex.setAmamentacaoFpn(jRadioButtonAmamentacaoFpn.isSelected());
		ex.setAnosVatFpn(jCheckBoxVatAnosFpn.isSelected());
		ex.setAnotacoesFm(jTextAreaAnotacoesFm.getText());
		ex.setAnticoncepcaoFg(jTextFieldAtinconcepcaoFg.getText());
		ex.setCausaInsucessoFpn(jTextFieldCausaInsucessoFpn.getText());
		ex.setCardiopatiaApFpn(jCheckBoxCardiopatiaApFpn.isSelected());
		ex.setCausaInsucessoFpn(jTextFieldCausaInsucessoFpn.getText());
		ex.setCelularFm(Integer.parseInt(ex.testaValor(jTextFieldCelularFm
				.getText())));
		ex.setCesareaFpn(jTextFieldCesareaFpn.getText());
		ex.setCiclosFg(jTextFieldCiclosFg.getText());
		ex.setCidadeFm(jTextFieldCidadeFm.getText());
		ex.setCirurgiasFg(jTextFieldCirurgiaFg.getText());
		ex.setClinicoNormalFpn(jRadioButtonClinicoNormalFpn.isSelected());
		ex.setClinicosFg(jTextFieldClinicosFg.getText());
		ex.setColoUterinoFg(jTextFieldColoUterinoFg.getText());
		ex.setConvenioFm(jTextFieldConvenioFm.getText());
		ex.setDataFm(cvt.strToDate(jDateFieldEmissaoFm.getText()));
		ex.setDiabetesAfFpn(jCheckBoxDiabetesAfFpn.isSelected());
		ex.setDiabetesApFpn(jCheckBoxDiabetesAfFpn.isSelected());
		ex.setDismenorreriaFg(jTextFieldDismemorreriaFg.getText());
		ex.setDosesVatFpn(jCheckBoxDosesVatFpn.isSelected());
		ex.setDppFpn(jTextFieldDppFpn.getText());
		ex.setDumFg(jTextFieldDumFg.getText());
		ex.setDumFpn(jTextFieldDumFpn.getText());
		ex.setDuracaoFpn(Integer.parseInt(ex.testaValor(jTextFieldDuracaoFpn.getText())));
		ex.setEnderecoFm(jTextFieldEnderecoFm.getText());
		ex.setEscolaridadeFm(jTextFieldEscolaridadeFm.getText());
		ex.setEspecularFg(jTextFieldEspecularFg.getText());
		ex.setEstadoCivilFm(jTextFieldEstadoCivilFm.getText());
		ex.setEstaturaFpn(Integer.parseInt(ex.testaValor(jTextFieldEstaturaFpn.getText())));
		ex.setExameSolicitadosFg(jTextAreaExameSolicitadosFg.getText());
		ex.setFumoFpn(jRadioButtonFumoFpn.isSelected());
		ex.setFumoQtoFpn(Integer.parseInt(ex.testaValor(jTextFieldFumoQtoFpn.getText())));
		ex.setGemeosAfFpn(jCheckBoxGemeosAfFg.isSelected());
		ex.setGenicologicoFpn(jRadioButtonGenicologicoFpn.isSelected());
		ex.setGestacaoFpn(jTextFieldGestacaoFpn.getText());
		ex.setGFg(jTextFieldGFg.getText());
		ex.setHipertensaoAfFpn(jCheckBoxHipertensaoArterialAfFpn.isSelected());
		ex.setHipertensaoApFpn(jCheckBoxHipertensaoArterialApFpn.isSelected());
		ex.setHistoricoFg(jTextAreaHistoricoQueixaFg.getText());
		ex.setHorarioFm(jTextFieldHorario.getText());
		ex.setIdadeFm(ex.testaValor(jTextFieldIdadeFm.getText()));
		ex.setImcFg(jTextFieldImcFg.getText());
		ex.setInspecaoVulvarFg(jTextFieldInspecaoVulvarFg.getText());
		ex.setIntercorrenciasFpn(jTextFieldIntecorrenciasFpn.getText());
		ex.setLeucorreriaFg(jTextFieldLeucorreria.getText());
		ex.setLibidoFg(jTextFieldLibidoFg.getText());
		ex.setMalformacaoAfFpn(jCheckBoxMalformacaoAfFpn.isSelected());
		ex.setMalformacaoApFpn(jCheckBoxMalformacaoApFpn.isSelected());
		ex.setMamasFg(jTextFieldMamasFg.getText());
		ex.setMamasNormalFpn(jRadioButtonMamasNormalFpn.isSelected());
		ex.setMenarcaFg(jTextFieldMenarcaFg.getText());
		ex.setMenopausaFg(jTextFieldMenopausaFg.getText());
		ex.setNascimentoFm(cvt.strToDate(jDateFieldNascFm.getText()));
		ex.setNome(jTextFieldNomeFm.getText());
		ex.setNumParceirosFg(Integer.parseInt(ex
				.testaValor(jTextFieldNumParceirosFg.getText())));
		ex.setObsExFpn(jTextAreaObsExFpn.getText());
		ex.setObsUsFpn(jTextAreaObsUsFpn.getText());
		ex.setOrientacoesFg(jTextAreaOrientacoes.getText());
		ex.setOutrosAfFpn(jCheckBoxOutrosAfFpn.isSelected());
		ex.setOutrosApFg(jTextFieldOutrosApFg.getText());
		ex.setOutrosApFpn(jCheckBoxOutrosApFpn.isSelected());
		ex.setOutrosDescAfFpn(jTextFieldoutrosDescAfFpn.getText());
		ex.setOutrosDescApFpn(jTextFieldoutrosDescApFpn.getText());
		ex.setOutrosGeniFg(jTextFieldOutrosGeniFg.getText());
		ex.setPaFg(jTextFieldPaFg.getText());
		ex.setPartoFpn(jTextFieldPartoFpn.getText());
		ex.setPcFg(jTextFieldPcFg.getText());
		ex.setPelvicaAPFpn(jCheckBoxCirPevilcaApFpn.isSelected());
		ex.setPesoFpnFg(Integer.parseInt(ex.testaValor(jTextFieldPesoFg
				.getText())));
		ex.setPesoPrevioFpn(Integer.parseInt(ex
				.testaValor(jTextFieldPesoPrevioFpn.getText())));
		ex.setPesoPrimeiraFpn(Integer.parseInt(ex
				.testaValor(jTextFieldPesoPrimeiraFpn.getText())));
		ex.setPesoRnsFg(Integer.parseInt(ex.testaValor(jTextFieldPesoRnsFg
				.getText())));
		ex.setPesoRnsFpn(Integer.parseInt(ex.testaValor(jTextFieldPesoRnsFpn
				.getText())));
		ex.setPfFg(jTextFieldPfFg.getText());
		ex.setPFg(jTextFieldpFg.getText());
		ex.setPnFg(jTextFieldPnFg.getText());
		ex.setPrescricaoFg(jTextAreaPrescricao.getText());
		ex.setProcedimentosFg(jTextFieldProcedimentosFg.getText());
		ex.setPuerperioFg(jTextFieldPuerperio.getText());
		ex.setQueixaFg(jTextAQueixaPrincipalFg.getText());
		ex.setReforcoVatFpn(jCheckBoxReforcosVatFpn.isSelected());
		ex.setSexarcaFg(jTextFieldSexarcaFg.getText());
		ex.setTabagismoFg(jTextFieldTabagismoFg.getText());
		ex.setTelefoneFm(Integer.parseInt(ex.testaValor(jTextFieldFoneFm
				.getText())));
		ex.setToqueBimanualFg(jTextFieldToqueBiManualFg.getText());
		ex.setTpmFg(jTextFieldTpmFg.getText());
		ex.setUltimaGestacaoFpn(Integer.parseInt(ex
				.testaValor(jTextFieldUltimaGestacaoFpn.getText())));
		ex.setUltimoCpFg(jTextFieldUltimoCgFg.getText());
		ex.setUrinariaApFpn(jCheckBoxInfecaoUrinariaApFpn.isSelected());

		String[][] tabela1 = new String[9][11];

		for (int i = 0; i < 9; i++) {
			for (int y = 1; y < 11; y++) {
					tabela1[i][y] =ex.testaNull(jTableGravidez.getValueAt(i, y).toString()); 
			}
		}
		ex.setTabelaEvolucao(tabela1);

		String[][] tabela2 = new String[14][7];

		for (int i = 0; i < 14; i++) {
			for (int y = 1; y < 7; y++) {
				tabela2[i][y] = ex.testaNull(jTableExamesLaboratoriaisFpn
						.getValueAt(i, y).toString());
			}
		}
		ex.setTabelaExamesLaboratoriais(tabela2);

		String[][] tabela3 = new String[3][7];

		for (int i = 0; i < 3; i++) {
			for (int y = 0; y < 7; y++) {
				tabela3[i][y] = ex.testaNull(jTableUltraSonografia1Fpn
						.getValueAt(i, y).toString());
			}
		}
		ex.setTabelaUltraSonografia1(tabela3);

		String[][] tabela4 = new String[10][2];

		for (int i = 0; i < 10; i++) {
			for (int y = 0; y < 2; y++) {
				tabela4[i][y] = ex.testaNull(jTableUltraSonografia2Fpn
						.getValueAt(i, y).toString());
			}
		}
		ex.setTabelaUltraSonografia2(tabela4);
		
		return ex;
	}

Gostaria de sugestões de como melhorar/melivrardisso porque nescessita de um método para fazer a operação inversa (ObjetoParaComponente) o que gera muitas linhas de código que tornam a classe muito grande (2200 linhas), além de eu acreditar que essa não seja uma pratica de programação muito boa.

Então se alguem tiver uma melhor forma de realizar esse método posta ae :wink:

8 Respostas

Marky.Vasconcelos

Voce precisa de mapear os componentes com o objeto, existem alguns frameworks que fazem isso.

Mas como eu não sabia na época que fiz, acabei criando um.

Ainda não falei dele no blog mas voce pode baixar o jar ou os fontes em http://markyameba.wordpress.com/markutilsproject/ (Esses fontes tem todo o pacote não apenas isso) e usar

Usa a seguinte idéia… para os componentes voce seta o nome com os atributos que precisam… um é o nome do campo no objeto e outro para formatadores.

Exemplo

JPanel content = new JPanel();

		nome.setName("[name:nome]");
		idade.setName("[name:idade][fmt:intFormatter]");

		binder = new Binder(content, Pessoa.class, new IntFormatter());
		
		Pessoa pessoa = new Pessoa();
		binder.updateModel(pessoa);//Pega os valores dos campos e seta no objeto
		binder.updateView(pessoa);//Pega os valores do objeto e seta nos campos

Voce precisa do IntFormatter que é o seguinte.

public class IntFormatter implements Formatter {
		@Override
		public String format(Object obj) {
			return obj.toString();
		}

		@Override
		public String getName() {
			return "intFormatter";
		}

		@Override
		public Object parse(String s) {
			return Integer.parseInt(s);
		}

	}
Marky.Vasconcelos

Ainda não implementei pra jCheckBoxes mas voce pode fazer essa parte na mão ainda. A vantagem de fazer isso é que voce só precisa a cada campo novo fazer o setName para o campo desejado.

Jose111

Vou testar aqui .

Se eu deixar daquela forma vai fica muito “porco” o meu código?

Marky.Vasconcelos

Eu me fiz essa pergunta a um tempo atraz.
Em resposta fiz o Binder.

De qualquer modo achei muito mais elegante com o binder. Fora que minha intenção final com ele é validar os dados também. Assim o programador só precisa se preocupar em trabalhar com o objeto já que ele já vai estar com os valores setados e validados.

Jose111

Pelo o que eu percebi ele funciona assim:

nome.setName("[name:nome]"); 
//onde nome é  o objeto que eu quero colocar o valor Ex: pessoa.setCidade()
//name é o nome do componente Ex: jTextFieldCidade

É assim ou estou errado, não entendi muito bem como utilizar esse recurso que você disponibilizou.

Marky.Vasconcelos

Não no name voce coloca o atributo da classe tipo.

nomeCidade.setName("[name:cidade]");//Aqui vai setar no atributo cidade da classe.
nome.setName("[name:nome]");//Aqui vai setar no atributo nome da classe.

Mas eles só são setados assim que voce chama o updateModel e vão pra tela quando é chamado o updateView.

Jose111

Não consegui implementar sua sugestão…
Poderia usar o hibernate para fazer isso??

Marky.Vasconcelos

Não. E por coincidencia postei um artigo sobre isso hoje.

Criado 22 de junho de 2009
Ultima resposta 7 de jul. de 2009
Respostas 8
Participantes 2