Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface



Documentos relacionados
AWT Versus Swing. Java Deployment Course: Aula 5. por Jorge H C Fernandes (jhcf@di.ufpe.br) CESAR-DI-UFPE Recife, 1999

Tratamento de Eventos em Programas com GUI - Graphical User Interface. Jorge H. C. Fernandes UFRN Junho de 2001

JAVA. Marcio de Carvalho Victorino. Interface Gráfica em Java (GUI)

Aplicações Gráficas com AWT

Tratamento de Eventos

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Swing. Page 1. Swing. Prof. Anderson Augustinho Uniandrade

Manipulando Eventos em Java

Interface Gráfica. LPG II Java Interface Gráfica AWT. Introdução. AWT - Abstract Window Toolkit

Curso de Java Módulo II Swing Fábio Mengue Centro de Computação - Unicamp

Gestão de eventos do Rato e teclado

Construção de Interfaces Gráficas

JavaBeans. Java Deployment Course: Aula 8. por Jorge H C Fernandes CESAR-DI-UFPE Recife, 1999

JFrame. JLabel : Utilizado como rótulo para exibição de texto e ícones. Interface Gráfica de JAVA - Graphical User Interface (GUI)

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

Programação Gráfica em Java.

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

Como construir aplicaçõ e applets

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Jframe, JDialog ou JApplet

{ System.exit(0); Exemplo (WindowAdapter) import java.awt.*; import java.awt.event.*;

Programação Orientada a Objetos em Java. GUI Graphical User Interface

Aula 2 Even e to t s d o M ouse

Programação Visual em Java

Interface Gráfica 2. E/S pode ser feita por interface gráfica Biblioteca Swing. javax.swing.*

Construção de Interfaces Gráficas - Introdução

Programação. 3 Período

Natureza do Software e dos Sistemas

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Programação Orientada a Objetos II

Interface com o Usuário (UI) UIs Desacopladas (2/3) BSI Bacharelado em Sistemas de Informação LOO Linguagens Orientadas a Objetos

Java AWT Objectos e Eventos. Label Button TextField Checkbox RadioButton Combobox

Fundamentos de GUIs. João Carlos Pinheiro. Última Atualização Junho / 2004 Versão: 3.0

UNIVERSIDADE FEDERAL DO PARANÁ. CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o.

Introdução à Programação. Interfaces Gráficas

TRATAMENTO DE EVENTOS EM JAVA USANDO SWING. George Gomes Cabral

Introdução à Programação Gráfica em Java

Java - Swing. Raphaela Galhardo raphaela@j2eebrasil.com.br

MÓDULO 4 SWING Parte 3

Java Linguagem de programação

Especialização em Engenharia de Software - CEUT

Interfaces Gráficas: Interações Complexas

Aplicação Linguagem de Programação Orientada a Objeto

Técnicas de Programação II

Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo

Entender princípios de projeto. Capacitação para construir GUIs. Entender os pacotes que contém componentes de GUI, e as classes e interfaces de

Curso de Aprendizado Industrial Desenvolvedor WEB

Programação Orientada a Objetos Flávio de Oliveira Silva 217

Desenvolvimento de Aplicações Desktop

Jogo Da Velha. - Parte 1 - Fazendo a parte gráfica do jogo da Velha

Programação de Interfaces Gráficas. Aula 1. Carlos Eduardo de Carvalho Dantas

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Aula 12 POO 1 Interface Gráfica no Java. Profa. Elaine Faria UFU

Capítulo 12 Eventos de interacção

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Professor Sérgio Furgeri

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

1 Criando um aplicativo visual em Java

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Prof. Jhonatan Fernando

Pacote Java Swing Parte 1

Desenvolvendo aplicações

8. Interfaces Gráficas de Usuário

Exercícios 07 Introdução à POO (Interface Gráfica)

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 2o. Semestre de 2017 Prof.

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

Programação Orientada a Objetos

Interface Gráfica com o Usuário (GUI) Profa. Isabel Harb Manssour (Material adaptado das aulas da Profa. Luciana Nedel e do Prof.

Teste de Software: Existe Isto? Jorge Fernandes Junho de 2004

Introdução Interfaces (revisão) Delegação de eventos Tratamento de eventos Classes Adaptadoras Capturando Eventos nos Componentes Swing

Aula 11: Interfaces gráficas (1/2): elementos de interface Swing

com JavaFX Scene Builder

CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I

Encerrando Introdução a Objetos e Classes Redefinição de Métodos (1)

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Resize Shape Basic Shape FACULDADE DE TECNOLOGIA SENAC PELOTAS

AULA 10 - CCT0024 Linguagem de Programação Objetivos da aula. Janelas para leitura e exibição de textos

Microsoft Office PowerPoint 2007

Orientação a Objetos

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

Interface Gráficas Parte I. Bruno Crestani Calegaro

Adicionando Caixas de Verificação no seu Programa Java

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Programação Orientada a Objetos em Java

Estilos de Interação

Frameworks O que é um framework?

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

Noções de. Microsoft SQL Server. Microsoft SQL Server

Introdução ao IDE Netbeans (Programação Java)

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 4- Tratamento de Eventos em Interfaces Gráficas


Introdução à Tecnologia Java 02/2012. Java Aula 02 15/08/2012. Celso Olivete Júnior.

Guia de Início Rápido

Java Foundation Classes Coleção de pacotes para criação de aplicações completas Desktop Interfaces gráficas (GUIs- Graphical User Interface)

Adding User Interaction

Transcrição:

Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface Jorge H. C. Fernandes (jorge@dimap.ufrn.br) UFRN Abril de 2002

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 Layout Managers (Organizadores de Containers)

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: Interface com o Usuário Regras de Negócio Persistência 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

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 Regras de Negócio :Universidade :Curso :Curso :Curso :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Aluno :Event :Event :Event :Event :Event :Event :Event Fachada invoca invoca invoca Produz eventos notifica notifica :EventDispatcher notifica :Event :Event Produz eventos Produz eventos :Event Listener :Event Listener :Event Listener

Componentes Visuais e Eventos que Produzem Componentes visuais notificam interessados sobre a ocorrência de interações, utilizando eventos Cada tipo (classe) de componente produz eventos específicos, dependendo do tipo de interação que oferece Um objeto da classe Button, por exemplo, informa a ocorrência de um click sobre ele através de um ActionEvent

Componentes Visuais do Package java.awt Component Button ScrollBar Canvas List CheckBox Choice Label Container TextComponent Panel Window TextField TextArea Frame Dialog

Quando Ocorrem os Principais Eventos? ActionEvent Usuário clica em um botão, pressiona return dentro de um textfield ou excolhe um item de menu WindowEvent Usuário fecha, minimiza, maximiza, etc., uma janela MouseEvent Usuário pressiona entra ou sai com o mouse de dentro um componente MouseMotionEvent Usuário move o mouse sobre um componente ComponentEvent Componente fica visível, é adicionado a um container FocusEvent Componente recebe o foco do teclado ItemEvent Seleção de uma tabela ou lista é modificada

A próxima figura mostra os tipos de eventos produzidos por cada classe, seja ela: Concreta (Frame, List, Button) ou Abstrata (Window, Container, Component, etc.)

Componentes Visuais e Eventos que Produzem Component EventObject Button ScrollBar AWTEvent Canvas List AdjustementEvent ActionEvent CheckBox Choice Label TextEvent ComponentEvent ItemEvent Container TextComponent ContainerEvent WindowEvent Panel Window TextField TextArea FocusEvent InputEvent PaintEvent Frame Dialog KeyEvent MouseEvent

Para cada tipo de evento existe um tipo de observador específico. Os vários tipos de observadores são chamados de listeners, e são especificados através de um contrato (interface). A próxima figura mostra uma hierarquia dos principais listeners do awt.

Principais Eventos java.awt e Seus Observadores (Listeners) EventListener EventObject ActionListener ItemListener AWTEvent AdjustementListener TextListener AdjustementEvent ActionEvent ComponentListener WindowListener TextEvent ComponentEvent ItemEvent ContainerListener MouseMotionListener ContainerEvent WindowEvent FocusEvent InputEvent PaintEvent KeyListener FocusListener MouseListener KeyEvent MouseEvent

Cada tipo de listener é notificado da ocorrência de eventos através da invocação de métodos (notificadores) sobre eles. Como um mesmo tipo de evento pode ser usado para várias finalidades, alguns listeners tem por obrigação implementar um ou mais métodos notificadores. A próxima figura mostra os principais tipos de listeners e seus métodos de notificação.

Observadores e seus Métodos de Notificação EventListener actionperformed(actionevent) adjustementvaluechanged(adjustementevent) componenthidden(componentevent) componentmoved(componentevent) ActionListener ItemListener componentresized(componentevent) componentshown(componentevent) itemstatechanged(itemevent) AdjustementListener TextListener textvaluechanged(textevent) windowactivated(windowevent) windowclosed(windowevent) ComponentListener WindowListener windowclosing(windowevent) windowdeactivated(windowevent) windowdeiconified(windowevent) windowiconified(windowevent) windowopened(windowevent) mousedragged(mouseevent) ContainerListener MouseMotionListener mousemoved(mouseevent) componentadded(containerevent) componentremoved(containerevent) focusgained(focusevent) focuslost(focusevent) mouseclicked(mouseevent) mouseentered(mouseevent) KeyListener FocusListener MouseListener mouseexited(mouseevent) mousepressed(mouseevent) mousereseased(mouseevent) keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent)

Especificação de Alguns Listeners. Ver detalhes no pacote java.awt.event package java.awt.event; interface ActionListener { void actionperformed(actionevent evt); interface WindowListener { void windowactivated(windowevent evt); void windowclosed(windowevent evt); void windowclosing(windowevent evt); void windowdeactivated(windowevent evt); void windowdeiconified(windowevent evt); void windowiconified(windowevent evt); void windowopened(windowevent evt); interface ContainerListener { void componentadded(containerevent evt); void componentremoved(containerevent evt);

Trecho de Código para Tratamento de Eventos // 1 - Criando um componente visual Button b1 = new Button( Salvar"); // 2 - Criando um observador de Eventos através de uma classe anônima ActionListener observadordeb1 = new java.awt.event.actionlistener() { // 2.1 - implementando o método para receber uma notificação public void actionperformed(actionevent e) { // 2.1.1 - invoca o método da fachada System.out.println( O botão salvar foi pressionado! ); // 3 - Registrando um observador (listener) junto a um componente b1.addactionlistener(observadordeb1);

Um Cenário Usando Diagrama de Mensagens: Criando botão e tratador de eventos; interagindo, produzindo, despachando e tratando eventos :Object :EventDispatcher Criação dos Widgets e Tratadores de Eventos Button b1 = new Button( Salvar ); :Button ActionListener listener = new ActionListener() {... b1.addactionlistener(listener); :ActionListener <<usuário>> listeners.add(listener) click! Interagindo com Widgets e Produzindo Eventos ActionEvent evt = new ActionEvent(...); :ActionEvent Dispatcher.dispatchEvent(evt, listeners); [para todo listener em listeners] listener.actionperformed(evt); Despachando e Tratando Eventos System.out.println( O botão salvar foi pressionado );

É definido um adapter para cada listener cujo contrato (interface) é formado por mais de um método. Cada adapter fornece uma implementação vazia dos métodos da interface que implementa. O uso de adapters facilita a construção de tratadores de eventos, pois ao herdar de um adapter, o tratador só precisa implementar um subconjunto dos métodos da interface que necessita tratar.

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) Observadores, Adapters e Métodos de Notificação

Exemplo de Adapter: WindowAdapter Ver detalhes no pacote java.awt.event package java.awt.event; interface WindowListener { void windowactivated(windowevent evt); void windowclosed(windowevent evt); void windowclosing(windowevent evt); void windowdeactivated(windowevent evt); void windowdeiconified(windowevent evt); void windowiconified(windowevent evt); void windowopened(windowevent evt); class WindowAdapter implements WindowListener { void windowactivated(windowevent evt) {/* implementação vazia */ void windowclosed(windowevent evt) {/* implementação vazia */ void windowclosing(windowevent evt) {/* implementação vazia */ void windowdeactivated(windowevent evt) {/* implementação vazia */ void windowdeiconified(windowevent evt) {/* implementação vazia */ void windowiconified(windowevent evt) {/* implementação vazia */ void windowopened(windowevent evt) {/* implementação vazia */

Usando WindowAdapter import java.awt.frame; import java.awt.event.*; class UsandoWindowAdapter extends Frame { UsandoWindowAdapter() { this.settitle("usando um Window Adapter"); this.addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent evt) { System.exit(0); ); this.pack(); this.show(); public static void main(string[] args) { new UsandoWindowAdapter();

Não Usando WindowAdapter import java.awt.frame; import java.awt.event.*; class NaoUsandoWindowAdapter extends Frame { NaoUsandoWindowAdapter () { this.settitle("não Usando um Window Adapter"); this.addwindowlistener(new WindowListener() { public void windowclosing(windowevent evt) { System.exit(0); public void windowclosed(windowevent evt) { public void windowdeactivated(windowevent evt) { public void windowdeiconified(windowevent evt) { public void windowiconified(windowevent evt) { public void windowopened(windowevent evt) { public void windowactivated(windowevent evt) { ); this.pack(); this.show(); public static void main(string[] args) { new NaoUsandoWindowAdapter();

Para ler mais Java: Como Programar, Deitel & Deitel, Capítulos 12 e 13. The Life Cycle of a Java Event in JDK 1.1, by Roedy Green, 2002. http://mindprod.com/event11.html