1 / 28

Jornada de Cursos – J2ME

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.

Download Presentation

Jornada de Cursos – J2ME

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. Agenda • Interface gráfica de baixo nível • Overview • Tratamento de eventos • Timer e TimerTask

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

  5. Overview • Graphics • Canvas • Tratamento de eventos

  6. 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

  7. 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)

  8. 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)

  9. 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

  10. Canvas – Sistema de Coordenadas

  11. 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()

  12. Canvas - Exemplo import 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 ); } }

  13. 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(); } }

  14. 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 )

  15. 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

  16. 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

  17. Exemplo Public void keyPressed(int keyCode) { switch (keyCode) { case Canvas.KEY_NUM5: // tratamento da tecla 5 break; case Canvas.KEY_NUM9: // tratamento da tecla 9 break; } }

  18. 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

  19. Manipulando imagens • Só pra relembrar • Imagens Estáticas • 1. Aloque a imagem Image im = Image.createImage(“/imageTest.png”); • 2. Mostre a imagem protected 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 preenchido graphics.fillRoundRect(0, 0, 50, 50, 20, 20); ... • 3. Mostre a imagem protected void paint(Graphics g) { ... g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP); ... }

  20. 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)

  21. 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

  22. 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)

  23. 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)

  24. TimerTask • Classe que representa uma Task • Possui três métodos • abstract void run() • public boolean cancel() • public long scheduledExecutionTime()

  25. Utilizando Timer e TimerTask • Crie um Timer • Crie uma classe que estende de TimerTask • Escreva o método run dessa nova classe • Agende o timer passando a nova classe como parâmetro

  26. Exemplo // Cria o Timer Timer tm = new Timer(); // Cria uma Task TodoTask tt = new TodoTask(); // Agenda o Timer para executar a task em 1000ms tm.schedule(tt, 1000); ... private class TodoTask extends TimerTask { public final void run() { // Faz alguma coisa } }

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

  28. Referências • Core J2ME • Site da Sun • Wireless Programming with J2ME: Cracking the code, ISBN: 0-7645-4885-9

More Related