linguagem de programaÇÃo visual ii
DESCRIPTION
Prof. Roberto Rosa [email protected]. LINGUAGEM DE PROGRAMAÇÃO VISUAL II. Aula 7. Abrindo apenas um objeto por vez no menu. - PowerPoint PPT PresentationTRANSCRIPT
Abrindo apenas um objeto por vez no menu
Bom, Conforme prometido, vamos tratar o "bug" que
permite abrir várias janelas ao mesmo tempo no nosso
sistema. Nesse sistema que utilizei para exemplo temos
duas janelas e um Menu Principal que abrirá estas janelas,
são elas: GUICarro e GUITeste.
Abrindo apenas um objeto por vez no menu
Para abrirmos somente uma janela teremos que implementar a classe InternalFrameListener
Observação: GUI significa - Graphics User Interface (Interface gráfica para o usuário)
A Figura a seguir mostra o projeto que utilizei para este tutorial.
Projeto utilizado como exemplo
Abrindo apenas um objeto por vez no menu
Atualmente podemos abrir quantas instâncias quisermos de cada objeto conforme Figura a seguir, porém, isto não é comum. O correto é abrir somente uma instância de cada janela. Vamos começar a tratar este bug.
Exemplo várias janelas abertas ao mesmo tempo
Abrindo apenas um objeto por vez no menu
Bom para tratar esse erro, primeiramente abra a "Classe MenuPrincipal" e entre no código-fonte da classe, conforme Figura. Notem onde posicionei o cursor do teclado. Eles encontra-se no lado esquerdo do abre chave da Classe. Na Figura a seguir a chave está na cor amarela.
Implementando a classe InternalFrameListener
Abrindo apenas um objeto por vez no menu
Após posicionar o cursor no local correto, temos que implementar uma Classe abstrata chamada "InternalFrameListener". Para implementar uma classe utilizamos a palavra reservada "implements".
Abrindo apenas um objeto por vez no menu
Após implementar a Classe, acenderá uma lâmpada indicando que precisamos implementar todos os métodos abstratos dessa Classe. Clique na lâmpada e implemente todos os métodos abstratos. A lâmpada sumirá e aparentemente você não verá nada de novo. Para visualizar os métodos implementados vá até o final da Classe. A Figura a seguir demonstra qual opção devemos escolher após clicar na lâmpada.
Implementando os Métodos abstratos
Implementando os Métodos abstratos
Após implementar a Classe e os métodos aparecerão
métodos no final da Classe conforme Figura a seguir:
Métodos abstratos implementdados
Implementando os Métodos abstratos
Note que não tem código implementado nestes métodos,
apenas uma exceção informando que ainda não tem
suporte ("Not supported yet."). Obs.: Ao lado de cada
método o próprio Netbeans coloca um ícone verde. Este
ícone informa que estes métodos estão sendo sobrescritos,
ou seja, eles existem também na Classe
InternalFrameListener.
Implementando os Métodos abstratos
Para não dar nenhum erro, vamos deletar todas essas
exceções, ou seja, passe em cada método abstrato e
apague o "throw new UnsupportedOperationException("Not
supported yet.");". Após apagar os throws os métodos
ficarão conforme Figura a seguir:
Métodos abstratos após aexclusão do conteúdo
Criando variáveis
O próximo passo é criar uma variável boolean para cada janela do nosso sistema. No nosso exemplo criaremos apenas 2 atributos(variáveis) na classe, são eles:
flagGuiCarro = false flagGuiMotos = false
Obs.: Note que estas variáveis estão recebendo "false" indicando que as janelas ainda estão fechadas.
Exemplo de criação variáveis booleanas
Ajustando os métodos
Após criar as flags (setando false para todas), vamos ajustar os métodos que são responsáveis por abrir as janelas, são eles:
private void abrirGuiCarro(){}
private void abrirGuiTeste(){}
Ajustando os métodos
Quando esses métodos forem chamados eles instanciarão
um objeto, colocarão a visibilidade para "true" (verdadeira)
e o mais importante, eles setarão a "flag" para true
indicando que a janela foi aberta. Após, o objeto que foi
instanciado deve ser adicionado na "lista de ouvidores de
Listeners", conforme a Figura:
Adicionando objeto na lista de ouvidores
Adicionando objeto na lista de ouvidores
Obs.: O if testa se a flagGuiTeste "NÃO" está verdadeira, ou
seja, testa se a janela já não está aberta. Se a janela
estiver aberta, não acontece nada, caso contrário ele abre
a janela.
Código dos métodos
FLAG
A partir de agora temos um problema, quando a janela abre a flag é passa a ser "verdadeira", porém, quando fechamos a janela ela não muda para "false". Precisamos fazer que essa flag mude para "false" quando a janela for fechada.
Para isso vamos utilizar 1 (um) dos métodos abstratos que foram implementados, conforme Figura:
Método internalFrameClosed
Método internalFrameClosed
O método que utilizaremos é o
"public void internalFrameClosed(InternalFrameEvent ife){}".
Esse método é responsável por pegar todos eventos de fechamento de qualquer janela InternalFrame. Notem que como parâmetro desse método entra um Evento de InternalFrame, exatamente o que necessitamos.
Método internalFrameClosed
OBS: Em algumas versões do Netbeans, JDK, sistema, o nome do objeto que entra no parâmetro do método muda de "ife" para "e".
Quando entra esse evento a única coisa que precisamos fazer é testar qual foi o "InternalFrame" que foi fechado e então setar a flag da janela correspondente para "false".
Para realizar esse teste utilizamos um "if" testando se "ife.getInternalFrame()" é uma instância de GuiTeste, se for, nós setamos a flagGuiCarro para false, caso contrário testamos se é uma instância de GUICarro, se for nós setamos a flagGUITeste para false.
Método internalFrameClosed
Após inserir os "ifs" no método "internalFrameClosed()" é só testar o código, eles já está funcionando.
Ao abrir o projeto você notará que o sistema permitirá a abertura de apenas uma janela de cada objeto, conforme a Figura:
Abrindo apenas 1 janela