• Nenhum resultado encontrado

Gestão de eventos do Rato e teclado

N/A
N/A
Protected

Academic year: 2021

Share "Gestão de eventos do Rato e teclado"

Copied!
13
0
0

Texto

(1)

1 António Gonçalves

Programação

Na Web

Gestão de eventos do

Rato e teclado

Gestão de Eventos 2 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Agenda

Estratégia Geral de gestão de eventos

Gestão de eventos em listeners distintos

Gestão de eventos através do uso de

interfaces

Gestão de eventos pelo uso de classes

internas

Gestão de eventos pelo uso de classes

anónimas

(2)

Gestão de Eventos

3 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Passos

1.

Determinara qual o tipo de evento

– Existem mais de 11 tipos distintos de eventos

• ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, TextListener,

WindowListener

2.

Definir uma classe que possa processar um

evento

– Implementar uma interface (KeyListener, MouseListener, etc.)

– Extender uma classe (KeyAdapter, MouseAdapter, etc.)

3.

Registo de um objecto da classe definida na

janela

w.addXxxListener(new MyListenerClass()); • i.e., addKeyListener, addMouseListener

Gestão de Eventos:

Num Listener distinto

Listener não precisam chamar qualquer

método da janela a que estão associados.

import java.applet.Applet; import java.awt.*;

public class ClickReporter extends Applet { public void init() {

setBackground(Color.yellow);

addMouseListener(new ClickListener());

} }

(3)

Gestão de Eventos

5 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Num Listener distinto (cont.)

import java.awt.event.*;

public class ClickListener extends MouseAdapter {

public void mousePressed(MouseEvent event) { System.out.println("Mouse pressed at (" + event.getX() + "," + event.getY() + ")."); } } Gestão de Eventos 6 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Generalização

Pretendemos que quando o evento

ClickListener acontecer seja desenhado um

circulo

Usar getGraphics para obter um objecto

Solução:

Chamar event.getSource para obter uma referencia da

janela ou componente GUI no qual é gerado o evento

Converter o resultado para o tipo certo

(4)

Gestão de Eventos

7 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Num Listener distinto

import java.applet.Applet;

import java.awt.*;

public class CircleDrawer1 extends Applet { public void init() {

setForeground(Color.blue);

addMouseListener(new CircleListener());

} }

Gestão de Eventos:

Num Listener distinto (cont.)

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class CircleListener extends MouseAdapter { private int radius = 25;

public void mousePressed(MouseEvent event) {

Applet app = (Applet)event.getSource();

Graphics g = app.getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius,

2*radius); }

(5)

Gestão de Eventos

9 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Num Listener distinto (resultado)

Gestão de Eventos

10 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Implementação de uma interface

import java.applet.Applet; import java.awt.*;

import java.awt.event.*;

public class CircleDrawer2 extends Applet

implements MouseListener { private int radius = 25; public void init() {

setForeground(Color.blue);

addMouseListener(this);

(6)

Gestão de Eventos

11 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Implementação de uma interface (cont.)

public void mouseEntered(MouseEvent event) {}

public void mouseExited(MouseEvent event) {}

public void mouseReleased(MouseEvent event) {}

public void mouseClicked(MouseEvent event) {}

public void mousePressed(MouseEvent event) {

Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } } Obrigatório a Implementações de toda a interface

Gestão de Eventos:

Definição de classe interna

import java.applet.Applet; import java.awt.*;

import java.awt.event.*;

public class CircleDrawer3 extends Applet { public void init() {

setForeground(Color.blue);

addMouseListener(new CircleListener());

}

Definição de uma classe no interior de outra, permite a classe interna ter acesso os métodos da classe externa.

(7)

Gestão de Eventos

13 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Definição de classe interna (cont.)

Nota: Continuação da classe do slide anterior

private class CircleListener

extends MouseAdapter { private int radius = 25;

public void mousePressed(MouseEvent event) {

Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } } } Gestão de Eventos 14 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Gestão de Eventos:

Definição de classe anonima interna

public class CircleDrawer4 extends Applet {

public void init() {

setForeground(Color.blue); addMouseListener

(new MouseAdapter() {

private int radius = 25;

public void mousePressed(MouseEvent event) { Graphics g = getGraphics(); g.fillOval(event.getX()-radius, event.getY()-radius, 2*radius, 2*radius); } }); } }

(8)

Gestão de Eventos

15 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Estrategias de gestão de eventos:

Ben. e Desv.

Listener separado

– Vantagens

• Pode ignorar eventos que não ser quer processar

• Uma classe distinta é mais fácil de gerir

– Desvantagens

• Necessita de uma passo extra para invocar os métodos no janela principal

implementação de uma interface

– Vantagens

• Não necessita de passos adicionais para invocar os métodos

– Desvantagens

• Tem que implementar todos os métodos de uma interface

Estrategias de tratamento de

eventos: Ben. e Desv.

, cont.

Classe interna

– Vantagens

• Não é necessário implementar métodos para todos os eventos

• Não necessita fazer chamada ao método

– Desvantagens

• um pouco confuso

Classe interna anónima

– Vantagens

• Não é necessário implementar métodos para todos os eventos

• Código mais compacto

– Desvantagens

(9)

Gestão de Eventos

17 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Lista de eventos

(Sumário)

Adapter Class

Listener (If Any) Registration Method

ActionListener addActionListener AdjustmentListener addAdjustmentListener ComponentListener ComponentAdapter addComponentListener ContainerListener ContainerAdapter addContainerListener FocusListener FocusAdapter addFocusListener ItemListener addItemListener KeyListener KeyAdapter addKeyListener MouseListener MouseAdapter addMouseListener MouseMotionListener MouseMotionAdapter addMouseMotionListener TextListener addTextListener

WindowListener WindowAdapter addWindowListener

Gestão de Eventos

18 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Eventos do Rato

MouseListener e MouseMotionListener partilham o

mesmo tipo de evento

Localização dos clicks

– event.getX() e event.getY()

Clicks Duplos

– Determinado pelo OS, não, pelo programador

– Chamada event.getClickCount()

Distinção dos botões do rato

– Chamar event.getModifiers() e comparar com

MouseEvent.Button2_MASK para click no botão do meio MouseEvent.Button3_MASK para click no botão de esquerda

(10)

Gestão de Eventos

19 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Correção da Escrita: Textfield

KeyListener corrige a escrita

ActionListener completa uma palavra com ENTER

FocusListener indica alternativas

Quadro de Desenho

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class SimpleWhiteboard extends Applet { protected int lastX=0, lastY=0;

public void init() {

setBackground(Color.white); setForeground(Color.blue);

addMouseListener(new PositionRecorder()); addMouseMotionListener(new LineDrawer());

}

protected void record(int x, int y) { lastX = x; lastY = y;

(11)

Gestão de Eventos

21 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Quadro de Desenho(Continuação)

private class PositionRecorder extends MouseAdapter { public void mouseEntered(MouseEvent event) {

requestFocus(); // Plan ahead for typing record(event.getX(), event.getY()); }

public void mousePressed(MouseEvent event) { record(event.getX(), event.getY()); } } ... Gestão de Eventos 22 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Quadro de Desenho(Continuação)

//Quando o Utilizador arrasta o rato são desenhas segmentos de linhas

private class LineDrawer extends MouseMotionAdapter { public void mouseDragged(MouseEvent event) {

int x = event.getX(); int y = event.getY();

Graphics g = getGraphics(); g.drawLine(lastX, lastY, x, y); record(x, y);

} } }

(12)

Gestão de Eventos

23 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Quadro de Desenho (Resultado)

Quadro de Desenho

:

Eventos do Teclado

(adicionar texto)

import java.applet.Applet; import java.awt.*;

import java.awt.event.*;

public class Whiteboard extends SimpleWhiteboard { protected FontMetrics fm;

public void init() { super.init();

Font font = new Font("Serif", Font.BOLD, 20); setFont(font);

fm = getFontMetrics(font);

addKeyListener(new CharDrawer());

(13)

Gestão de Eventos

25 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Quadro de Desenho

:

Eventos do Teclado

(adicionar texto)(cont.)

...

private class CharDrawer extends KeyAdapter { // When user types a printable character, // draw it and shift position rightwards. public void keyTyped(KeyEvent event) {

String s = String.valueOf(event.getKeyChar()); getGraphics().drawString(s, lastX, lastY); record(lastX + fm.stringWidth(s), lastY); } } } Gestão de Eventos 26 http://ltodi.est.ips.pt/leonardo/ci/MaterialApoio.htm

Whiteboard (Results)

Referências

Documentos relacionados

Permanecem em vigor os demais dispositivos legais pre- vistos na Lei Municipal n.º 1.330 de 30 de Dezembro de 2008, que instituiu o Plano Diretor de Desenvolvimento Municipal de

Based on the theory that the muscle strength of elderly in- dividuals responds differently to an activity program, ac- cording to the presence or absence of a medical diagnosis

O Instituto Federal de Educação, Ciência e Tecnologia de Goiás (IFG) – Câmpus Uruaçu, faz saber, pela presente Chamada Pública, que estarão abertas no período de 06 a 22

amostra suspeita é uma amostra colhida na sequência da obtenção de resultados positivos em amostras colhidas em controlos por sondagem (na fase de fabrico das substâncias do grupo

Procurando facilitar a escolha dos seedlings estamos agrupando os cruzamentos por expectativa de colorido e forma.. Procurando facilitar a escolha dos seedlings estamos agrupando

26- Os atletas da equipe que vier a desistir ou não comparecer à competição, após ter efetuado a confirmação de sua inscrição no Congresso Técnico, terá como pena a

Convencionam as partes que, exclusivamente para os empregados que mantêm contrato de trabalho com a mesma empresa ou, empresa do mesmo grupo econômico há mais de 10 (dez) anos e

Assim, a casa favorece as relações e a convivência entre (1) gerações de uma mesma família, entre (2) pessoas de famílias diferentes e que são afins na casa em que escolheram