Bom dia galera
Estou com uma dúvida sobre MVC. O que aprendi na faculdade é que a tela captura o evento, e passa para o controle tratar. Mas a forma com que o controle lida com isso achei meio confusa. O que tenho agora é o seguinte:
public class ControleSetor implements ActionListener{
private JFrame tela = null;
...
public ControleSetor(JFrame tela) throws Exception{
...
this.tela = (TelaSetor)tela;
}
public void actionPerformed(ActionEvent e) {
if( e.getActionCommand().equals("Incluir") ){
JPanel painelPrincipal = (JPanel)tela.getContentPane();
JPanel painelCentral = (JPanel)painelPrincipal.getComponent(1);
JTextField txtCodSetor = (JTextField) painelCentral.getComponent(1);
JTextField txtNomeSetor = (JTextField) painelCentral.getComponent(3);
JOptionPane.showMessageDialog(null, txtCodSetor.getText() + "\n" + txtNomeSetor.getText());
}
}
Achei muito confuso ter que chamar getComponent() pra chegar aos componentes da tela.
Eu vi que o Eclipse gera uns metodos get pros componentes:
private JTextField getTxtCodigoSetor() {
if (txtCodigoSetor == null) {
txtCodigoSetor = new JTextField(15);
}
return txtCodigoSetor;
}
E perguntei pro professor se eu poderia usar esse metodo pra conseguir os objetos, ao invés de usar getComponent(), ele disse que não dá, porque apenas o valor é passado.
Mas eu, não satisfeito, resolvi tentar :twisted:
E deu certo!
public void actionPerformed(ActionEvent e) {
if( e.getActionCommand().equals("Sair") )
tela.dispose();
else
if( e.getActionCommand().equals("Incluir") ){
JPanel painelPrincipal = (JPanel)tela.getContentPane();
JTextField txtCodSetor = ((TelaSetor)tela).getTxtCodigoSetor();
txtCodSetor.setText("aaa");
}
}
Passando a tela para o construtor do controle, e pegando o JTextField a partir dessa tela com um get da propria tela, eu consegui alterar o texto desse componente.
Tem algum problema em fazer isso?
Outra duvida, o método getTxtCodigoSetor() que o eclipse gera é private, mas eu consigo chamar ele a partir do controle, porque?