Tratamento de Eventos em
Programas com
GUI - Graphical User Interface
Jorge H. C. Fernandes
([email protected])
UFRN
Programas com GUI
• Separação De Abstrações
• Arquitetura em Camadas
• Necessidade de Tratamento de Eventos
• Componentes de um Programa Baseado em Eventos
• Arquitetura de Um Programa com Interface Gráfica
• de Eventos
– Componentes Visuais (java.awt) e Seus Eventos
– Eventos e seus Observadores
– Observadores e Métodos de Notificação
Separação de Abstrações
• Para que um programa seja construído
de forma modular e manutenível é
imprescindível a separação entre:
– modelo do sistema
• as chamadas “regras de negócios”
– Interface com usuário
• define a forma como o programa interage com
o usuário e como as regras de negócios são
ativadas
Arquitetura em Camadas
•
Além dos módulos de Interface com o Usuário e Regras de
Negócios, a grande maioria dos programas de suporte a sistemas de
informações gerenciais ainda contém um módulo de Persistência
(também chamado de Armazenamento/Recuperação de Dados)
•
Estes três módulos são normalmente organizados em forma de
camadas, conforme o esquema abaixo:
•
Em um esquema de camadas a interface interage apenas com as
regras de negócio, e as regras de negócio interagem com a interface e
com a camada de persistência
Interface com o Usuário
Persistência
Regras de Negócio
A Necessidade de Usar
Tratamento de Eventos
• De modo diferente de um programa com interface
baseada em textos (do tipo que usa comandos
System.out.println
e
IO.readStr()
), programas com interface
gráfica oferecem uma vasta quantidade de
alternativas de entrada de dados ao usuário.
• O usuário podem adotar um dentre vários caminhos
possíveis, e o programador não consegue controlar o
fluxo da mesma forma que o programa com interface
textual.
• A solução usualmente adotada em programas
modernos é construir a interação através do
tratamento de eventos
Componentes de um
Programa Baseado em Eventos
•
Vários Componentes Visuais, também chamados de widgets
aparecem na tela e capturam interação do usuário;
•
Vários Eventos
produzidos como resultado da interação do usuário com os componentes visuais, o que normalmente ocorre através do mouse e teclado;
•
Um Despachante de Eventos
organiza os eventos produzidos pelos componentes numa fila, que normalmente
não é manipulada pelo programador
•
Vários Observadores de Eventos, também chamados de listeners
vários objetos que podem registrar o interesse por eventos específicos, conversando diretamente com os Componentes Visuais ou através do Despachante. Os observadores são notificados pelo despachante quando um evento de interesse ocorre e invocam um método específico sobre a Fachada;
•
Uma Fachada das Regras de Negócio,
um único objeto que tem por função receber as invocações dos observadores e executar a operação adequada
Arquitetura de um Programa
com Interface Gráfica
Componentes Visuais
:Event :Event :Event:Despachante de Eventos
:Event Listener :Event Listener :Event Listener :Event :Event :Event :Event :Event :Eventnotifica
notifica
notifica
:Universidade:Curso :Curso :Curso :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno
Regras de Negócio
Fachada
invoca
invoca
invoca
Produz eventos
Produz eventos
Produz eventos
TextField TextArea CheckBox Button Canvas Panel Label TextComponent List ScrollBar Component Window Container EventObject AWTEvent AdjustementEvent ItemEvent TextEvent ActionEvent ComponentEvent FocusEvent PaintEvent WindowEvent ContainerEvent InputEvent Frame Dialog Choice KeyEvent MouseEvent
Componentes Visuais e Eventos que
Produzem
EventObject AWTEvent AdjustementEvent ItemEvent TextEvent ActionEvent ComponentEvent FocusEvent PaintEvent WindowEvent ContainerEvent InputEvent KeyEvent MouseEvent ComponentAdaper ContainerAdapter KeyAdapter FocusAdapter WindowAdapter MouseMotionAdapter MouseAdapter FocusListener MouseListener ComponentListener ContainerListener ActionListener AdjustementListener KeyListener WindowListener MouseMotionListener TextListener ItemListener EventListener
actionPerformed(ActionEvent) adjustementValueChanged(AdjustementEvent) ComponentAdaper ContainerAdapter KeyAdapter FocusAdapter WindowAdapter MouseMotionAdapter MouseAdapter FocusListener MouseListener ComponentListener ContainerListener ActionListener AdjustementListener KeyListener WindowListener MouseMotionListener TextListener ItemListener EventListener componentHidden(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) itemStateChanged(ItemEvent) textValueChanged(TextEvent) windowActivated(WindowEvent) windowClosed(WindowEvent) windowClosing(WindowEvent) windowDeactivated(WindowEvent) windowDeiconified(WindowEvent) windowIconified(WindowEvent) windowOpened(WindowEvent) mouseDragged(MouseEvent) mouseMoved(MouseEvent) componentAdded(ContainerEvent) componentRemoved(ContainerEvent) focusGained(FocusEvent) focusLost(FocusEvent) mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReseased(MouseEvent) keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)