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?
