Jornada de Cursos – J2ME Aula 4 – Interface de alto e baixo nível

Preview:

Citation preview

Jornada de Cursos – J2ME

Aula 4 – Interface de alto e baixo nível

Pausa para reflexão

"Sem esforço não há progresso, mas com esforço também não há progresso”

Ryotan Tokuda, Mestre Zen

Agenda

• Interface gráfica de baixo nível• Overview• Tratamento de eventos

• Timer e TimerTask

Interface de baixo nível“Às vezes, a ignorância é uma bênção”

Overview• Graphics

• Canvas

• Tratamento de eventos

Graphics• Classe que provê métodos simples de

renderização 2D em Canvas

• Arcos, imagens, linhas, retângulos e texto podem ser desenhados

• Não é instanciada diretamente

Graphics• Métodos principais• drawArc (int x, int y, int width, int height, int startAngle,

int arcAngle)• drawImage(Image img, int x, int y, int anchor)• drawLine(int x1, int y1, int x2, int y2)• drawString(String str, int x, int y, int anchor)• fillArc(int x, int y, int width, int height, int startAngle,

int arcAngle) • fillRect(int x, int y, int width, int height)

Graphics• Métodos principais - continuação• setClip(int x, int y, int width, int height)• setColor(int red, int green, int blue• setFont(Font font)• translate(int x, int y)

Canvas• Classe que herda de Displayable• Representa uma Área na tela que pode ser livremente

desenhada e apagada• Fornece métodos para tratamento de eventos de

teclas, “game actions” e “pointer actions”• Usa Graphics para desenho no Canvas• O programador cria uma subclasse de Canvas

Canvas – Sistema de Coordenadas

Canvas• Métodos principais• int getGameAction (int keyCode) • int getKeyCode(int gameAction) • String getKeyName(int keyCode)• keyPressed(int keyCode) • keyReleased(int keyCode) • keyRepeated(int keyCode) • paint(Graphics g)• repaint()

Canvas - Exemploimport javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class MyCanvas extends Canvas {

private MIDlet midlet;

public MyCanvas( MIDlet midlet ){ this.midlet = midlet; } protected void paint( Graphics g ){ g.setColor( 255, 255, 255 ); g.fillRect( 0, 0, getWidth(), getHeight() ); g.setColor( 0, 0, 0 ); g.drawString( "Hello there!", getWidth()/2, 0, g.TOP | g.HCENTER ); }}

Canvas – Exemplo (Cont.)public class MyMIDlet extends MIDlet {

private Display display; private MyCanvas canvas; public MyMIDlet(){ display = Display.getDisplay( this ); canvas = new MyCanvas( this ); } ... protected void startApp(){ display.setCurrent( canvas ); } ... public void exit(){ destroyApp( true ); notifyDestroyed(); }}

Tratamento de eventos• Não é necessário criar um listener• public void keyPressed(int keyCode ) • public void keyRepeated(int keyCode ) • public voidkeyReleased(int keyCode ) • public void pointerPressed(int x, int y ) • public void pointerDragged(int x, int y ) • public void pointerReleased(int x, int y )

Game Actions• Aplicações portáveis que necessitem de teclas

direcionais e eventos relacionados a jogos devem preferencialmente utilizar game actions a keyCodes

• Game actions• UP, DOWN, LEFT, RIGHT, FIRE, GAME_A,

GAME_B, GAME_C, GAME_D

Tratamento de eventos• int getGameAction(int keyCode) • Retorna a gameAction da tecla especificada

• int getKeyCode(int gameAction) • Retorna o keyCode de uma gameAction

• String getKeyName(int keyCode) • Retorna o nome da tecla especificada

ExemploPublic void keyPressed(int keyCode) {

switch (keyCode) {case Canvas.KEY_NUM5:

// tratamento da tecla 5break;

case Canvas.KEY_NUM9:// tratamento da tecla 9 break;

}}

Exercício• Escreva uma aplicação que dado um evento de

pressionamento de uma tecla imprime na tela o nome da tecla pressionada

• Lembrando que eventos de tecla pressionada são tratados pelo método keyPressed() de Canvas

Manipulando imagens• Só pra relembrar• Imagens Estáticas

• 1. Aloque a imagemImage im = Image.createImage(“/imageTest.png”);

• 2. Mostre a imagemprotected void paint(Graphics g) {...g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);...

• Imagens Dinâmicas• 1. Aloque a imagem

Image im = Image.createImage(80, 20);• 2. Crie o conteúdo da imagem (usando arcs, rectangles, lines e text)

// pegue o Graphics do objeto Graphics graphics = im.getGraphics();// desenhe um retangulo preenchidographics.fillRoundRect(0, 0, 50, 50, 20, 20);...

• 3. Mostre a imagemprotected void paint(Graphics g) {...g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);...}

Exercício• Escreva um MIDlet que reconhe Game Actions e

desenha uma Imagem indicando qual tecla foi pressionada

• Lembrando que as imagens devem ser preferencialmente em formato PNG

• As teclas a serem reconhecidas são UP, DOWN, LEFT, RIGHT e FIRE (5)

Timer e TimerTask• Facilitam a execução de tarefas em segundo

plano• Baseado no conceito de agendamento de

tarefas, onde um cronômetro dispara uma tarefa a ser executada, uma única vez ou periodicamente• Timer: O agendador de tarefas• TimerTask: Executa uma tarefa

Timer• Fornece seis métodos para agendamento de

tarefas

• Dois deles para tarefas de execução única• schedule(TimerTask task, long delay)• schedule(TimerTask task, Date time)

Timer – Tarefas Repetitivas• void schedule(TimerTask task, long delay, long

period)• void schedule(TimerTask task, Date firstTime,

long period)• void scheduleAtFixedRate(TimerTask task,

long delay, long period)• void scheduleAtFixedRate(TimerTask task,

Date firstTime, long period)

TimerTask• Classe que representa uma Task

• Possui três métodos• abstract void run()• public boolean cancel()• public long scheduledExecutionTime()

Utilizando Timer e TimerTask

1. Crie um Timer

2. Crie uma classe que estende de TimerTask

3. Escreva o método run dessa nova classe

4. Agende o timer passando a nova classe como parâmetro

Exemplo// Cria o TimerTimer tm = new Timer();

// Cria uma TaskTodoTask tt = new TodoTask();

// Agenda o Timer para executar a task em 1000mstm.schedule(tt, 1000);

...private class TodoTask extends TimerTask {

public final void run() {// Faz alguma coisa

}}

Código exemplo• http://www.cin.ufpe.br/~ela/jornada/Exemplos/

TimerTaskMIDlet.java

Referências

• Core J2ME

• Site da Sun

• Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9

Recommended