Interfaces Gráficas (GUIs) em Java usando Swing Parte II - Tratando Eventos Prof. Ricardo Linden GUI em Java - parte II.

Slides:



Advertisements
Apresentações semelhantes
Eventos Marco Antonio, Arquiteto de Software – TJDF Novembro/2005
Advertisements

ADT – Arvore Binária de Pesquisa
1 Java: Tratamento de Exceções Alcides Calsavara.
While While Condição // comandos End While. Exemplos While Var contador As Integer contador = 0 While (contador < 10) contador += 1 console.ConsoleWrite(contador)
Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
Listas Encadeadas Circulares Listas Duplamente Encadeadas
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios.
Linguagem de Programação II
Capítulo 15 Swing – Parte 1.
Informática Básica André Mesquita Rincon Técnico em Informática Integrado ao Ensino Médio – 1º ano – 2010/1.
PROGRESSÃO ARITMÉTICA P.A.
FORTRAN 90 Denise Yumi Takamura.
Treinamento GP3 USP – GEFIM Abril de 2004 Alcides Pietro, PMP.
Exemplos de 3 posições relativas de prédio fronteiro
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço ContextManager Treinamento no GRADEp Framework Master-Worker.
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço Collector Treinamento no GRADEp Serviço Collector CollectorDemo e.
Treinamento no GRADEp GRADEp Desktop DesktopSwing.
Introdução à Orientação a Objetos Prof. Ricardo Linden
Classes Internas e Anônimas
Servidores e Programação Web Redes de Computadores.
Mais sobre classes Baseada no Livro: Deitel&Deitel - C++ How To program Cap. 7 Prentice Hall 1994 SCE 213 Programação Orientada a Objetos, ICMC - USP 2.
Profa. Graziela Santos de Araújo Algoritmos e Programação II, 2010
Geração de Código Algoritmo de Escalonamento de instruções – List Scheduling.
O Fluxo de Testes © Alexandre Vasconcelos
HAND: Height Above the Nearest Drainage
Página de entrada A página de entrada, ou a index, representa um convite para o seu site.
FERRAMENTAS DA QUALIDADE
BATALHA ESPIRITUAL NO LAR: IDENTIFICANDO OS PERIGOS
CT-300 – Seminário de Tese 1/25 Um Framework Padrão para Simulação de Modelos de Robôs Móveis de Robôs Móveis Juliano A. Pereira Prof. Carlos H. C. Ribeiro.
1.3 – Interpretadores – Compiladores versus Interpretadores
Jumpers 1. O que são Jumpers
LIDERANÇA.
FUNDAÇÃO CARLOS CHAGAS
Implementação Do JXTA Como Protocolo De Transporte Do JacORB
Business Process Management e Workflow - jBPM Aluno: Filipe Ferraz Salgado Orientador: Francisco Reverbel Novembro 2006.
TE 043 CIRCUITOS DE RÁDIO-FREQÜÊNCIA
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Recursividade Estrutura de Dados.
Marco Antonio Montebello Júnior
Introdução à Probabilidade
Entendendo as definições de classe
The Data Warehouse Toolkit
Frações Professor: Graciano Pianezzer Beletti.
LINGUAGENS DE PROGRAMAÇÃO
Programação Concorrente com Thread Java
OpenGL Computação Gráfica. O que é OpenGL? Uma linguagem de programação gráfica de baixo nível Projetada para gráfico interativo 2D e 3D Uma interface.
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
1 Seja o resultado de um experimento aleatório. Suponha que uma forma de onda é associada a cada resultado.A coleção de tais formas de ondas formam um.
Tutorial II: Tratando eventos em Java
Aula de reposição Prof. Grace e Ângela
Professor: Hyggo Almeida
Sincronização com Locks. Locks É um mecanismo de sincronização de processos/threads em que estas devem ser programadas de modo que seus efeitos sobre.
1 António Arnaut Duarte. 2 Sumário: primeiros passos;primeiros passos formatar fundo;formatar fundo configurar apresentação;configurar apresentação animação.
Programação Visual em Java
Linguagem de Programação III
Interface Grafica - Swing Professor Rafael Monteiro
José Pacheco A. Prado. Você pode definir diferentes cursores em seus projetos. Para isto basta utilizar a função setCursor.
Mapeamento de CSP para JCSP Patrícia Muniz (pmf) Rafael Duarte (rmd)
Java 2D Marco Antonio. Java2D Conjunto de classes para trabalhar com gráficos e imagens. A principal classe desta API é JComponent. Com esta classe é.
1 2 Observa ilustração. Cria um texto. Observa ilustração.
CALENDÁRIO SEXY Ele & Ela. CALENDÁRIO SEXY Ele & Ela.
Java Generics Adeline de Sousa Silva.
ArrayList e Genéricos Profs. PROG2 - UNISINOS.
Alisson Rafael Appio SOP aplicado em um jogo tipo de corrida usando a arquitetura cliente e servidor Alisson Rafael Appio
POO.
Rio Verde - Goiás - Brasil
Transcrição da apresentação:

Interfaces Gráficas (GUIs) em Java usando Swing Parte II - Tratando Eventos Prof. Ricardo Linden GUI em Java - parte II

Incrementando nossas interfaces Vamos ver mais alguns componentes que vão nos permitir uma maior funcionalidade. Depois, vamos melhorar a maneira como tratamos os eventos. Assim, seremos capazes de fazer ótimas interfaces, que não fazem o usuário querer destruir o micro! GUI em Java - parte II

Nossas telas e os eventos Até agora nossas telas não fazem absolutamente nada - precisamos dar vida a elas, acrescentando a capacidade de lidar com eventos... Na programação orientada a eventos a ordem de execução de um programa é indeterminada. Os componentes da tela causam eventos quando interagem com o usuário ou com o SO. Estes eventos devem ser tratados, fazendo com que o programa responda e dirigindo a execução através dos tratadores de eventos. GUI em Java - parte II

Eventos Cada vez que o usuário bate numa tecla, movimenta o mouse ou aperta um botão deste, um evento ocorre. A programação orientada a eventos (Event-driven programming) consiste em fazer programas cuja ordem de execução seja determina pela ocorrência destes eventos. Todo objeto pode ser notificado por um evento Basta implementar a interface apropriada E então registrar estes métodos como um event listener do evento apropriado. GUI em Java - parte II

Programação Orientada a Eventos Na programação orientada a eventos, nós precisamos de um loop eterno que fica eternamente esperando por uma entrada do usuário. Isto é feito no Java sem nosso conhecimento... Só pelo fato de uma GUI estar ativa, este pseudo-loop está rodando. Quando um evento ocorre, o gerenciador de janelas (window manager) cria um evento e passa para um tratador de eventos definido pelo programador. Este processo é chamado de callback. No final das contas, nosso trabalho é definir os tratadores de eventos... GUI em Java - parte II

Eventos Os componentes Swing podem gerar vários tipos de eventos diferentes. Alguns exemplos: Usuário clica em um botão  ActionListener Usuário fecha um frame  WindowListener Usuário pressiona um botão do mouse  MouseListener Usuário move o mouse  MouseMotionListener Componentes se tornam visíveis  ComponentListener GUI em Java - parte II

Entendendo os eventos Cada evento é representado por um objeto que contém informações sobre este evento. Event source: é quem gera o evento, normalmente um componente da GUI Event listener Responde ao evento. Pode ser qualquer classe Java que implemente a interface correta. Uma única fonte pode ter múltiplos listerners. Um único listener pode responder a múltiplas sources. GUI em Java - parte II

Básico do tratamento de eventos em Java Escreva uma classe que implemente a interface associada ao evento a ser tratada. Normalmente, esta interface tem o nome do formato SomethingListener. Exemplo: tratadores de eventos de janelas são WindowListener, e os de mouse, MouseListener Crie um objeto da classe que você definiu. Registre o objeto que você criou como tratador de eventos de um determinado objeto usando o método apropriado. Normalmente, este método tem o formato addSomethingListern(listener) GUI em Java - parte II

Hierarquia de Eventos do Java java.lang.Object +--java.util.EventObject +--java.awt.AWTEvent +--java.awt.event.ActionEvent +--java.awt.event.TextEvent +--java.awt.event.ComponentEvent +--java.awt.event.FocusEvent +--java.awt.event.WindowEvent +--java.awt.event.InputEvent +--java.awt.event.KeyEvent +--java.awt.event.MouseEvent Precisamos colocar no nosso cabeçalho a statement import java.awt.event.*; GUI em Java - parte II

Action Events Tipo de evento mais simples e comum no Swing Representa um ação qualquer ocorrendo em um componente da GUI Criado por: cliques em butão mudanças em checkboxes cliques de menu bater [Enter] em uma textbox etc. GUI em Java - parte II

Esperando por Action Events Acrescente um listener ao componente O método listener apropriado será chamado quando o evento ocorrer (pro exemplo, quando o botão for clicado) Para eventos de ação, use a classe ActionListener GUI em Java - parte II

Básico para ouvir eventos Para fazermos um tratador de eventos precisamos de três ações básicas Especificar uma classe que implemente uma interface de listener: public class MyClass implements ActionListener { Código que implemente métodos dentro da interface listener public void actionPerformed(ActionEvent e) { ...//code that responds to the event... } Executar um código que registre uma instância desta classes como um listener de um ou mais componentes someComponent.addActionListener(instanceOfMyClass); GUI em Java - parte II

Escrevendo um ActionListener Precisamos implementar a interface ActionListener, que especifica o método actionPerformed que deve ser implementado em nossa classe. Não interessa se sua classe extender alguma outra classe. O código básico é o seguinte: // Prints a message when the button is clicked. public class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println(“Event occurred!”); } GUI em Java - parte II

Escrevendo um ActionListener Agora precisamos associar nosso ActionListener ao elemento gráfico cujo evento de ação nós trataremos. JButton button = new JButton(“button 1”); MyActionListener listener = new MyActionListener(); button.addActionListener(listener); Agora, quando o botão button for clicado, veremos a mensagem “Event occurred!” impressa O método addActionListener existe em vários componentes (basicamente todos aqueles que podem ter um evento de ação associado). GUI em Java - parte II

Onde colocar um ActionListener Podemos colocar em uma classe interna public class Outer { private class Inner implements ActionListener { public void actionPerformed(ActionEvent event) { ... } public Outer() { JButton myButton = new JButton(); myButton.addActionListener(new Inner()); GUI em Java - parte II

Onde colocar um ActionListener Podemos colocar em uma classe interna anônima public class Outer { public Outer() { JButton myButton = new JButton(); myButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { ... } ); GUI em Java - parte II

Exemplo public class GUIDemo extends JFrame implements ActionListener{ protected int numCl=0; protected JButton meuJButton = null; protected JLabel meuJLabel = null; public GUIDemo(String title) { super(title); initialize(); } public GUIDemo() {this("Demonstrando eventos");} GUI em Java - parte II

Exemplo (cont.) protected void initialize() { this.setSize( new Dimension(200,75) ); meuJButton = new JButton("Clique em mim!"); meuJButton.addActionListener(this); meuJLabel = new JLabel("Num. clicks="+numCl); this.getContentPane().add(meuJButton, BorderLayout.NORTH); this.getContentPane().add(meuJLabel, BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); this.setVisible(true); } GUI em Java - parte II

Exemplo (cont.) public void actionPerformed(ActionEvent e) { numCl++; meuJLabel.setText("Num Clicks:"+numCl); } GUI em Java - parte II

Eventos de Mouse Motivação: Capturar os clicks e os movimentos do mouse dentro de um componente de uma GUI. Responder a atividade de mouse com ações apropriadas. Criar programas interativos que são dirigidos pela atividade do mouse. GUI em Java - parte II

A interface MouseListener package java.awt.event; public interface MouseListener { public void mouseClicked(MouseEvent event); public void mouseEntered(MouseEvent event); public void mouseExited(MouseEvent event); public void mousePressed(MouseEvent event); public void mouseReleased(MouseEvent event); } public class ML implements MouseListener { public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { System.out.println(“Pressionou!”); } public void mouseReleased(MouseEvent e) {} } GUI em Java - parte II

Usando MouseListener // Dado um panel qualquer MyPanel panel = new MyPanel(); panel.addMouseListener(new MyMouseListener()); Problemas: Temos que implementar toda a interface Isto é tedioso, especialmente se só queremos usar um único método, como no exemplo. GUI em Java - parte II

MouseAdapter É uma classe abstrata com implementações vazias de todos os métodos da interface MouseListener Para usar, extenda a classe MouseAdapter e sobreescreva os métodos que lhe interessam. Evita a necessidade de implementar um monte de métodos vazios que não nos interessam. Exemplo: public class MyMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent event) { System.out.println(“User pressed mouse button!”); } // usando a classe que definimos (MyMouseAdapter) MyPanel panel = new MyPanel(); panel.addMouseListener(new MyMouseAdapter()); GUI em Java - parte II

Objetos MouseEvent Repare que todos os métodos de MouseAdapter recebem um parâmetro da classe MouseEvent. Esta é uma classe pré-definida para que possamos saber de onde o evento que diparou o método foi proveniente e certas circunstâncias modificadoras associadas a ele Constantes em InputEvent (mãe de MouseEvent) public static int BUTTON1_MASK,BUTTON2_MASK, BUTTON3_MASK,CTRL_MASK, ALT_MASK, SHIFT_MASK GUI em Java - parte II

Usando MouseEvent Métodos interessantes em MouseEvent public int getClickCount() public Point getPoint() public int getX(), getY() public Object getSource() public int getModifiers() Exemplo de uso: public class MyMouseAdapter extends MouseAdapter { public void mousePressed(MouseEvent event) { Point p = event.getPoint(); Object source = event.getSource(); if (source == myPanel && p.getX() < 10) JOptionPane.showMessageDialog(null, “Lado esquerdo!”); } GUI em Java - parte II

Capturando movimento do mouse: MouseMotionListener package java.awt.event; public interface MouseMotionListener { public void mouseDragged(MouseEvent event); public void mouseMoved(MouseEvent event); } A classe abstrata MouseMotionAdapter provê um aimplementação vazia de ambos os métoso para que possamos sobreescrevê-los. A idéia é a mesma da classe MouseAdapter com a interface MouseListener GUI em Java - parte II

Exemplo MouseMotionAdapter public class MyAdapter extends MouseMotionAdapter { public void mouseMoved(MouseEvent event) { Point p = event.getPoint(); int x = event.getX(); int y = event.getY(); System.out.println(“Mouse is at ” + p); System.out.println(“x is ” + x); System.out.println(“y is ” + y); } // usando o método myPanel.addMouseMotionListener(new MyAdapter()); GUI em Java - parte II

MouseInputListener A interface MouseInputListener extende tanto a interface MouseListener quanto a interface MouseMotionListener Código: package javax.swing.event; public interface MouseInputListener extends MouseListener, MouseMotionListener {} Logo, se você quiser usar as duas, você pode implementar apenas MouseInputListener. Assim como nos casos anteriores, existe uma classe Adapter que implementa versões vazias de todos os métodos desta interface. Neste caso a classe a ser extendida é MouseInputAdapter GUI em Java - parte II

Exemplo de MouseInputAdapter public class MyMouseInputAdapter extends MouseInputAdapter { public void mousePressed(MouseEvent event) { System.out.println(“Mouse was pressed”); } public void mouseMoved(MouseEvent event) { Point p = event.getPoint(); System.out.println(“Mouse is at ” + p); // using the listener MyMouseInputAdapter adapter = new MyMouseInputAdapter(); myPanel.addMouseListener(adapter); myPanel.addMouseMotionListener(adapter); GUI em Java - parte II

Eventos de Teclado São usados para ouvir atividade de teclado dentro de um componente UI (geralmente um panel) Com eles respondemos a atividade de teclado com as ações apropriadas. GUI em Java - parte II

A interface KeyListener A interface KeyListener deve ser implementada para ouvirmos entradas do teclado. Código: package java.awt.event; public interface KeyListener { public void keyPressed(KeyEvent event); public void keyReleased(KeyEvent event); public void keyTyped(KeyEvent event); } Assim como nos casos anteriores, existe uma classe Adapter que implementa versões vazias de todos os métodos desta interface. Neste caso a classe a ser extendida é KeyAdapter GUI em Java - parte II

A Classe KeyEvent Objetos da classe KeyEvent são enviados para nossos tratadores de eventos de teclado. InputEvent public static int CTRL_MASK, ALT_MASK, SHIFT_MASK KeyEvent (descendente da InputEvent) public static int VK_A .. VK_Z, VK_0 .. VK_9, VK_F1 .. VK_F10,VK_UP, VK_LEFT, ..,VK_TAB, VK_SPACE,VK_ENTER,... (um para cada tecla) public char getKeyChar() public int getKeyCode() public Object getSource() public int getModifiers() (use as máscaras definidas em InputEvent) GUI em Java - parte II

Exemplo de KeyAdapter Quer dizer: se a tecla da seta à direita foi class PacManKeyListener extends KeyAdapter { public void keyPressed(KeyEvent event) { char keyChar = event.getKeyChar(); int keyCode = event.getKeyCode(); if (keyCode == KeyEvent.VK_RIGHT) { pacman.setX(pacman.getX() + 1); pacpanel.repaint(); } else if (keyChar == 'Q') System.exit(0); } PacPanel panel = new PacPanel(); panel.addKeyListener(new PacKeyListener()); Quer dizer: se a tecla da seta à direita foi pressionada... GUI em Java - parte II

Eventos de Janelas Os eventos de janela são tratados por classes que implementem a interface WindowListener. Definição: public interface WindowListener { public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowOpened(WindowEvent e) public void windowIconified(Window Event e) public void windowDeIconified(Window Event e) public void windowActivated(Window Event e) public void windowDeactivated(Window Event e) } Como seria de se esperar, existe uma classe chamada WindowAdapter que tem uma implementação vazia de cada um destes métodos. GUI em Java - parte II

Resumo dos eventos em cada componente GUI em Java - parte II

Problema : código de GUI grande Construir e configurar uma interface com um grande número de botões, menus e etc. pode levar um grande tempo. Muitas linhas de código podem ser desperdiçadas fazendo tarefas muito semelhantes. Se o código precisar ser mudado, muitos erros podem ser causados inadvertidamente. Use ferramentas para desenhar suas telas - não as faça sozinho. Fazê-las sozinho normalmente é mais difícil e normalmente dá piores resultados GUI em Java - parte II