Métodos: Getters e Setters. Métodos Getters servem para, quando numa execução do programa, possamos ter acesso aos dados referentes a determinado objeto, sem comprometer a estrutura básica do programa em si. Métodos Setters servem para, quando numa execução do programa, possamos modificar o valor dos atributos pertencentes a outro objeto sem comprometer a forma e a estrutura básica do programa. São Métodos Getters e Setters no exemplo abaixo: public Button getBtnEviar() { return btnEviar; }
public void setBtnEviar(Button btnEviar) { this.btnEviar = btnEviar; }
Como pode ser percebido, o método getBtnEnviar está retornando o btnEnviar, note que para termos acesso ao btnEnviar SEM a necessidade de torna-lo estático ou público, precisamos ter este método, sem ele, seria impossível acessar uma variável que não fosse publica ou estática. Também percebemos que o método setBtnEnviar modifica o valor do btnEnviar, por outro btnEnviar, que apesar de ter o mesmo nome, representam objetos diferentes, neste caso, temos o btnEnviar que é inerente ao método e o btnEnviar que é inerente à classe. Construtores São métodos construtores, os métodos que não possuem variável de retorno e possuem o mesmo nome da classe, existem VARIOS tipos de construtores, contudo, vamos estudar apenas os 2 principais: public class Funcionario { private String nome; private int idade; private double salario; public Funcionario(){ nome = ""; idade = 0; salario = 0.0; } public Funcionario(String nome, int idade, double salario){ this.nome = nome; this.idade = idade; this.salario = salario; }
O Primeiro método construtor é chamado método default, pois é o que existirá num determinado objeto MESMO QUE não se declare método construtor algum, já o segundo vai substituindo os valores, um a um, criando um objeto que já possua valores pré-definidos em sua criação. Janelas e Controladoras. Ao criarmos uma janela, é usual que também criemos uma controladora. A controladora irá implementar os métodos que controlam janelas e botões, e todos os botões, e até mesmo a janela serão aplicados a tal, como no exemplo: public class JanelaDados extends Frame { private private private private private private private private private
Button btnEviar; Button btnCancelar; TextField campoTextoNome; TextField campoTextoIdade; TextField campoTextoSalario; Label avisoNome; Label avisoSalario; Label avisoIdade; Controladora ctr;
public JanelaDados(String titulo, Controladora ctr) { super.setTitle(titulo); this.ctr = ctr; inicializaJanela(); inicializaComponentes(); inicializaEventos();
}
private void inicializaEventos() { this.btnEviar.setActionCommand("enviar"); this.btnCancelar.setActionCommand("cancelar"); this.ctr.setJanelaDados(this); this.addWindowListener(ctr); this.btnEviar.addActionListener(ctr); this.btnCancelar.addActionListener(ctr); } ...
Agora a controladora: public class Controladora implements WindowListener, ActionListener { private JanelaDados janelaDados; private Funcionario funcionario; public Controladora(Funcionario funcionario) { this.funcionario = funcionario; } ... public void setJanelaDados(JanelaDados janelaDados) { this.janelaDados = janelaDados; } }
A controladora pede um pouco da lógica e um pouco da janela, é ela que vai fazer a CONEXÃO entre lógica e objetos com a janela e seus componentes, settar o actionCommand irá facilitar a nossa pesquisa sobre “o que foi clicado”, no caso, “qual botão foi clicado”, observando o exemplo: @Override public void actionPerformed(ActionEvent arg0) { switch(arg0.getActionCommand()){ case"enviar"://Note que o Action Command foi settado e estamos utilizando uma comparação que compara diretamente o que foi settado this.funcionario.setNome(this.janelaDados.getCampoTextoNome().getText( )); this.funcionario.setIdade(Integer.parseInt(this.janelaDados.getCampoTe xtoIdade().getText())); this.funcionario.setSalario(Double.parseDouble(this.janelaDados.getCam poTextoSalario().getText())); impressao(); break; case"cancelar"://Note que o Action Command foi settado e estamos utilizando uma comparação que compara diretamente o que foi settado if(JOptionPane.showConfirmDialog(this.janelaDados, "Tem certeza ?") == 0){ this.janelaDados.dispose(); } break; } }
Agora finalizando, para rodar o programa, utilizamos o método Main, este método irá inicializar todos os objetos e como são utilizados seus construtores principais, eles devem enviar os objetos corretos aos construtores corretos: public static void main(String[] args) { new JanelaDados("JANELA DADOS", new Controladora(new Funcionario()));
}
Lembrando que o programa roda A PARTIR do método main, sem este método, não seria possível executar o programa. Um exemplo de criação de objetos para uma janela: public class JanelaDados extends Frame { //Delcaração private Button btnEviar; private Button btnCancelar; private TextField campoTextoNome; private TextField campoTextoIdade; private TextField campoTextoSalario; private Label avisoNome; private Label avisoSalario; private Label avisoIdade; private Controladora ctr; ... private void inicializaComponentes() { this.btnEviar = new Button("ENVIAR"); this.btnCancelar = new Button("CANCELAR"); this.campoTextoNome = new TextField(); this.campoTextoIdade = new TextField(); this.campoTextoSalario = new TextField(); this.avisoIdade = new Label("Digite sua idade"); this.avisoNome = new Label("Digite seu nome"); this.avisoSalario = new Label ("Digite seu salario");
this.btnEviar.setSize(80, 20); this.btnCancelar.setSize(80, 20); this.campoTextoNome.setSize(350, 20); this.campoTextoIdade.setSize(350, 20); this.campoTextoSalario.setSize(350, 20); this.avisoIdade.setSize(100, 20); this.avisoNome.setSize(100, 20); this.avisoSalario.setSize(100, 20);
this.btnEviar.setLocation(300, 540); this.btnCancelar.setLocation(450, 540); this.campoTextoNome.setLocation(350, 110); this.campoTextoIdade.setLocation(350, 210); this.campoTextoSalario.setLocation(350, 310); this.avisoIdade.setLocation(50, 110); this.avisoNome.setLocation(50, 210); this.avisoSalario.setLocation(50, 310); this.add(btnEviar); this.add(btnCancelar); this.add(campoTextoNome); this.add(campoTextoIdade); this.add(campoTextoSalario); this.add(avisoIdade); this.add(avisoNome); this.add(avisoSalario); }
O código acima mostra detalhadamente a necessidade de instanciar o objeto, que é no comando: this.btnEviar = new Button("ENVIAR");
e settar seu tamanho e posição na tela: this.btnEviar.setSize(80, 20); this.btnEviar.setLocation(300, 540);
e ainda adicioná-lo na tela: this.add(btnEviar);
Tendo em vista isto, podemos agora explicar, classes que Estendem outra classe tornam-se parte, ou do mesmo tipo que as classes estendidas, assim, podemos avaliar que a classe JanelaDados é um frame, pois esta estende Frame: public class JanelaDados extends Frame {
As classes que implementam determinada interface, passam a ter a “conexão” que a determinada interface a obriga E ainda precisam OBRIGATORIAMENTE implementar, ou seja adicionar ao seu código, todos os métodos da interface, um exemplo é a controladora: public class Controladora implements WindowListener, ActionListener {
… Por ter implementado ActionListener, ela foi obrigada a implementar também o método ActionPerformed. @Override public void actionPerformed(ActionEvent arg0) {
…