linguagem de programaÇÃo visual ii

28
LINGUAGEM DE PROGRAMAÇÃO VISUAL II Prof. Roberto Rosa [email protected] Aula 7

Upload: signa

Post on 12-Jan-2016

25 views

Category:

Documents


3 download

DESCRIPTION

Prof. Roberto Rosa [email protected]. LINGUAGEM DE PROGRAMAÇÃO VISUAL II. Aula 7. Abrindo apenas um objeto por vez no menu. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

LINGUAGEM DE PROGRAMAÇÃO VISUAL

II

Prof. Roberto [email protected]

Aula 7

Page 2: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 3: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 4: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Projeto utilizado como exemplo

Page 5: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 6: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Exemplo várias janelas abertas ao mesmo tempo

Page 7: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 8: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Implementando a classe InternalFrameListener

Page 9: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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".

Page 10: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 11: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Implementando os Métodos abstratos

Page 12: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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

Page 13: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 14: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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:

Page 15: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Métodos abstratos após aexclusão do conteúdo

Page 16: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 17: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Exemplo de criação variáveis booleanas

Page 18: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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

Page 19: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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:

Page 20: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Adicionando objeto na lista de ouvidores

Page 21: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 22: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Código dos métodos

Page 23: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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:

Page 24: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Método internalFrameClosed

Page 25: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 26: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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.

Page 27: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

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:

Page 28: LINGUAGEM DE PROGRAMAÇÃO VISUAL  II

Abrindo apenas 1 janela