1 / 28

LINGUAGEM DE PROGRAMAÇÃO VISUAL II

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

signa
Download Presentation

LINGUAGEM DE PROGRAMAÇÃO VISUAL II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prof. Roberto Rosa robertorsci@gmail.com LINGUAGEM DE PROGRAMAÇÃO VISUAL II Aula 7

  2. 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: GUICarroe GUITeste.

  3. Abrindo apenas um objeto por vez no menu • Para abrirmos somente uma janela teremos que implementar a classe InternalFrameListener • Observação: GUI significa - GraphicsUser Interface (Interface gráfica para o usuário) • A Figura a seguir mostra o projeto que utilizei para este tutorial.

  4. Projeto utilizado como exemplo

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

  6. Exemplo várias janelas abertasao mesmo tempo

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

  8. Implementando a classe InternalFrameListener

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

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

  11. Implementando os Métodos abstratos

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

  13. 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 ("Notsupportedyet."). 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.

  14. 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("Notsupportedyet.");". Após apagar os throws os métodos ficarão conforme Figura a seguir:

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

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

  17. Exemplo de criação variáveis booleanas

  18. 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: • privatevoidabrirGuiCarro(){} • privatevoidabrirGuiTeste(){}

  19. 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:

  20. Adicionando objeto na lista de ouvidores

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

  22. Código dos métodos

  23. 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:

  24. Método internalFrameClosed

  25. Método internalFrameClosed • O método que utilizaremos é o • "publicvoidinternalFrameClosed(InternalFrameEventife){}". • 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.

  26. 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 flagGUITestepara false.

  27. 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:

  28. Abrindo apenas 1 janela

More Related