linguagem de programaÇÃo visual ii

Post on 12-Jan-2016

25 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Prof. Roberto Rosa robertorsci@gmail.com. LINGUAGEM DE PROGRAMAÇÃO VISUAL II. Aula 7. Abrindo apenas um objeto por vez no menu. - PowerPoint PPT Presentation

TRANSCRIPT

LINGUAGEM DE PROGRAMAÇÃO VISUAL

II

Prof. Roberto Rosarobertorsci@gmail.com

Aula 7

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

top related