Chamada de Formulários e Passagem de Informações
Prof. Giuliano Prado de Morais Giglio, M.Sc.
A Plataforma Java
Aplicações Visuais com
Swing
Quando em um formulário FormA deseja-se chamar e exibir um formlário FormB, precisamos criar uma instância de FormB em FormA;
Lembre-se que um JFrame criado é uma classe que representa um formulário (e não um exemplar, um objeto);
Exemplo: vamos colocar um botão em FormA para que, ao clica-lo, chame e exiba o FormB.
Vamos acionar o
actionPerformed
do botãoInclua a linha de instanciação abaixo:
new FormB().setVisible(true);
Verifique que foi criada a instância, ou seja, o formulário e, através do objeto, chama-se o método setVisible() para que exiba o formulário criado, no caso FormB.
Observe que o FormA ficará “atrás” do FormB,
ou seja, ambos estarão em execução e
exibidos:
Portanto, dependendo do caso e da execução pretendida para sua aplicação, pode-se fechar o formulário “chamador”, no caso, FormA após a chamada de FormB:
new FormB().setVisible(true);
this.dispose();
Isso fechará por completo FormA.
Mas caso deseja-se somente “esconde-lo”, sem
“destrui-lo”, basta:
this.setVisible(false);
Muitas vezes precisamos passar informações de um formulário para outro;
Mas como pode ser feito se há duas instâncias (formulários) criadas na memória sem variável que as referencie?
Observe:
◦ A chamada de um form foi feita criando a instancia:
new FormA( ) diretamente
e sem coloca-la numa variável do tipo FormA:
FormA fa = new FormA( );
Podemos utilizar uma variável de classe (static) para receber um valor de um outro formulário, bem como compartilhar qualquer dado entre eles numa aplicação;
Exemplo: suponhamos quem em FormA precisa-se receber um valor inteiro de FormB
Logo, criamos um atributo estático em FormA.
public class FormA extends javax.swing.JFrame { public static int valInteiro = 0;
Para que em FormB eu consiga passar um valor para FormA, através do atributo criado, basta fazer:
FormA.valInteiro = 50;
Observe que, por ser estático, a própria classe chama (ou acessa) o atributo, que agora está compartilhado.
◦ Em FormA agora ele possui o valor 50, que está em valInteiro.
Veja que o atributo está sendo acessado diretamente, pois sua visibilidade é public
Para mantermos as condições de Encapsulamento, podemos deixa-lo private e criar os métodos get/set para o atributo:
private static int valInteiro = 0;
public void setValInteiro(int val){
....
}
public int getValInteiro(){
....
}
Para acessar agora em FormB, utilizamos os métodos de acesso:
FormA.setValInteiro(50);
Da mesma forma, podemos passar
qualquer dado, principalmente se for um
objeto qualquer.
Suponhamos que vamos passar um objeto Carro de FormB para FormA:
Em FormA:
public static Carro car1 = null;
Em FormB:
Carro carro = new Carro();
carro.setPlaca(“HFG-7766”);
carro.setMarca(“Audi”);
FormA.car1 = carro;
(ou via set)
Desta forma, se você desejar verificar se há ou não Carro passado ao FormA, basta fazer a verificação em FormA:
if (car1 != null)
//tem objeto atribuido
else
//não tem objeto atribuido