Java Básico - Construtores, Frames e Instancias

Page 1

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) {


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.