[j2se] Associar Elementos da Tela no Controle

2 respostas
samirrolemberg

Estou construindo uma aplicação com multicamadas e cheguei na etapa de criação do controle.

nesta aplicação se dá o seguinte:

Há uma tela principal (JFrame) que está associada a um controle. Este por sua vez, controla os elementos desta tela e se for o caso chama uma nova tela (um JDialog neste caso).

Este JDialog tem a mesma situação do JFrame entretanto, eu consigo associar os elementos desta tela apenas quando um evento de um botão é disparado (Action Listener), coisa que não acontece com o JFrame (aonde os elementos são associados no momento em que são criados).

segue trecho dos codigos:

TelaPrincipal - JFrame

public TelaPrincipal() {
		super();
		ctp = new ControleTelaPrincipal(this);//instancia o controlador desta tela
		initialize();//inicializa os componentes da tela
		ctp.associarBarraMenu();//associa os elementos desta tela - Barra de Menu
	}

ControleTelaPrincipal

//contrutor da classe
	public ControleTelaPrincipal(JFrame tela) {
		// TODO Auto-generated constructor stub
		super();
		this.tela = tela;
	}
//metodo
	public void associarBarraMenu(){
		barraMenu = (JMenuBar) this.tela.getJMenuBar();							
			menuSistema 		= (JMenu) barraMenu.getMenu(0);
					itemMenuTrocarUsuario 	= (JMenuItem) menuSistema.getMenuComponent(0);
					itemMenuSair 			= (JMenuItem) menuSistema.getMenuComponent(1);
				menuSistemaVendas 	= (JMenu) barraMenu.getMenu(1);
					itemMenuVisualizarProgramacao = (JMenuItem) menuSistemaVendas.getMenuComponent(0);
				menuGerenciar 		= (JMenu) barraMenu.getMenu(2);
					menuEnsaios 	= (JMenu) menuGerenciar.getMenuComponent(0);
						itemMenuAgendarEnsaios 		= (JMenuItem) menuEnsaios.getMenuComponent(0);
						itemMenuConsultarEnsaios 	= (JMenuItem) menuEnsaios.getMenuComponent(1);
					menuPecas 		= (JMenu) menuGerenciar.getMenuComponent(1);
						itemMenuNovoEspetaculo 				= (JMenuItem) menuPecas.getMenuComponent(0);
						itemMenuConsultaEspetaculoProducoes = (JMenuItem) menuPecas.getMenuComponent(1);
					menuProgramacao = (JMenu) menuGerenciar.getMenuComponent(2);
						itemMenuIncluirSessoes 		= (JMenuItem) menuProgramacao.getMenuComponent(0);
						itemMenuConsultarSessoes 	= (JMenuItem) menuProgramacao.getMenuComponent(1);
				menuControlePessoal = (JMenu) barraMenu.getMenu(3);		
					itemMenuNovoFuncionario 		= (JMenuItem) menuControlePessoal.getMenuComponent(0);
					itemMenuConsultarFuncionario 	= (JMenuItem) menuControlePessoal.getMenuComponent(1);
					itemMenuCriarLogIn 				= (JMenuItem) menuControlePessoal.getMenuComponent(2);
				menuRelatorios = (JMenu) barraMenu.getMenu(4);
					itemMenuGerarBorderout 				= (JMenuItem) menuRelatorios.getMenuComponent(0);
					itemMenuEmitirRelatorioPecas 		= (JMenuItem) menuRelatorios.getMenuComponent(1);
					itemMenuRelatorioVendaIngresso 		= (JMenuItem) menuRelatorios.getMenuComponent(2);
					itemMenuRelatorioQuantitativoVendas = (JMenuItem) menuRelatorios.getMenuComponent(3);
				menuAjuda = (JMenu) barraMenu.getMenu(5);
					itemMenuSobre = (JMenuItem) menuAjuda.getMenuComponent(0);
	}
//método que catupra o evento
	@Override
	public void actionPerformed(ActionEvent e) {	
		if (e.getActionCommand().equals(itemMenuNovoFuncionario.getText())) {
			if (telaNovoFuncionario == null) {
				telaNovoFuncionario = new TelaNovoFuncionario(this.tela);
			} else {
				telaNovoFuncionario.dispose();
				telaNovoFuncionario = new TelaNovoFuncionario(this.tela);				
			}
		}
		if (e.getActionCommand().equals(itemMenuSair.getText())) {
			try {
				DAOConexao.disconect();
				System.out.println("close");
			} catch (SQLException e1) {
				JOptionPane.showMessageDialog(null, "Ocorreu um erro ao tentar encerrar o banco de dados.", "sTGA - Erro com o Banco de Dados", JOptionPane.ERROR_MESSAGE);
			} catch (Exception e1) {
				JOptionPane.showMessageDialog(null, "Ocorreu um erro.", "sTGA - Erro\n"+e1.getMessage(), JOptionPane.ERROR_MESSAGE);
			}
			this.tela.dispose();
		}
	}

aqui é a grande questão.

Nesta parte se eu deixar como a tela de cima:

TelaNovoFuncionario

public TelaNovoFuncionario(Frame owner) {
		super(owner);
		ctnf = new ControleTelaNovoFuncionario(this);
		initialize();
		ctnf.associarComponentesTela();//mesmo com esta linha ele não funciona como a tela anterior
	}

não funciona. Então, eu só consigo manipular esta tela se, e somente se eu apertar um botão.

TelaNovoFuncionario

public TelaNovoFuncionario(Frame owner) {
		super(owner);
		ctnf = new ControleTelaNovoFuncionario(this);
		initialize();
		//removido: ctnf.associarComponentesTela();
	}

ControleTelaNovoFuncionario

//contrutor da tela
	public ControleTelaNovoFuncionario(JDialog tela) {
		// TODO Auto-generated constructor stub
		super();
		this.tela = tela;

	}
//método que associa os componentes da tela
	public void associarComponentesTela(){
		painelPrincipal = (JPanel) this.tela.getContentPane();
			painelDadosPessoais = (JPanel) painelPrincipal.getComponent(0);
				campoTextoMatricula 		= (JTextField) 	painelDadosPessoais.getComponent(9);
				campoTextoCPF 				= (JTextField) 	painelDadosPessoais.getComponent(10);
				campoTextoRG 				= (JTextField) 	painelDadosPessoais.getComponent(11);
				campoTextoNome 				= (JTextField) 	painelDadosPessoais.getComponent(12);
				campoTextoDataNascimento 	= (JTextField) 	painelDadosPessoais.getComponent(13);
				comboEstadoCivil			= (JComboBox)  	painelDadosPessoais.getComponent(14);
				radioMasculino				= (JRadioButton)painelDadosPessoais.getComponent(15);
				radioFeminino				= (JRadioButton)painelDadosPessoais.getComponent(16);
				campoTextoNacionalidade 	= (JTextField) 	painelDadosPessoais.getComponent(17);
				comboCargo					= (JComboBox) 	painelDadosPessoais.getComponent(18);
			painelEndereco 		= (JPanel) painelPrincipal.getComponent(1);
				campoTextoEndereco			= (JTextField) painelEndereco.getComponent(8);
				campoTextoBairro 			= (JTextField) painelEndereco.getComponent(9);
				campoTextoCidade 			= (JTextField) painelEndereco.getComponent(10);
				campoTextoUF 				= (JTextField) painelEndereco.getComponent(11);
				campoTextoCEP 				= (JTextField) painelEndereco.getComponent(12);
				campoTextoDDD 				= (JTextField) painelEndereco.getComponent(13);
				campoTextoTelefone 			= (JTextField) painelEndereco.getComponent(14);
				campoTextoEmail 			= (JTextField) painelEndereco.getComponent(15);
			painelOpcoes 		= (JPanel) painelPrincipal.getComponent(2);
				botaoIncluir 				= (JButton)		painelOpcoes.getComponent(0);
				botaoLimparCampos 			= (JButton)		painelOpcoes.getComponent(1);
				botaoFechar 				= (JButton)		painelOpcoes.getComponent(2);
	}
//método que captura os eventos da tela
	@Override
	public void actionPerformed(ActionEvent e) {
		associarComponentesTela(); //aqui, se eu não colocar este metodo eu nao consigo associar os elementos da tela
		// TODO Auto-generated method stub
		if (e.getActionCommand().equals(botaoFechar.getText())) {
			this.tela.dispose();
		}
		if (e.getActionCommand().equals(botaoLimparCampos.getText())) {
			limparCampos();
		}
		if (e.getActionCommand().equals(botaoIncluir.getText())) {
			//implementar
		}

	}

então a exemplo, se eu quiser que o combobox inicie com x elementos, eu tenho que escrever na propria tela.

e se eu quiser adicionar mais pelo controle, eu apenas consigo se o usuário clicar em um botão antes.

alguem ja passou por este caso?

2 Respostas

pedromuyala

Rapaz seu caso poderá ser solucionado com o uso de MVC ou MVP.
Bastante conteúdo sobre MVC poderá ser encontrado aqui!
Tanto teoria quanto implementação! E um pouco de Camadas, Pattern Observer, MVP e Exception’s.
Porém vai precisar de um pouco de esforço e boa vontade.
Espero ter ajudado! :wink:

samirrolemberg

pedromuyala:
Rapaz seu caso poderá ser solucionado com o uso de MVC ou MVP.
Bastante conteúdo sobre MVC poderá ser encontrado aqui!
Tanto teoria quanto implementação! E um pouco de Camadas, Pattern Observer, MVP e Exception’s.
Porém vai precisar de um pouco de esforço e boa vontade.
Espero ter ajudado! :wink:

Eu não sei se não ficou tão implicito assim, mas o programa é em MVC…

na verdade ele tem 4 camadas (MVCP)+a iInterface.

o que eu postei ali é apenas o V linkado ao C

A tela está em separado e não implementa nada.

o controle associa os elementos da tela e os controla empacotando os dados para repassar ao DAO.

o DAO por sua vez tem seus metodos definidos por uma interface que o fará acessar o banco de dados.

enfim…

Criado 19 de abril de 2010
Ultima resposta 21 de abr. de 2010
Respostas 2
Participantes 2