<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FJ2ME%2FCanvas</id>
		<title>Java Tutorial/J2ME/Canvas - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FJ2ME%2FCanvas"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/J2ME/Canvas&amp;action=history"/>
		<updated>2026-04-22T08:20:59Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/J2ME/Canvas&amp;diff=4073&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/J2ME/Canvas&amp;diff=4073&amp;oldid=prev"/>
				<updated>2010-06-01T04:58:02Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 04:58, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/J2ME/Canvas&amp;diff=4072&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/J2ME/Canvas&amp;diff=4072&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Canvas key event and navigate through arrow keys ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.lcdui.Image;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class Navigate2MIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
  private Command exitCommand;&lt;br /&gt;
  Displayable nd;&lt;br /&gt;
  Image image = null;&lt;br /&gt;
  public Navigate2MIDlet() {&lt;br /&gt;
    try {&lt;br /&gt;
      image = Image.createImage(&amp;quot;/J.png&amp;quot;);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
    }&lt;br /&gt;
    Display display = Display.getDisplay(this);&lt;br /&gt;
    nd = new Navigate2Canvas(image);&lt;br /&gt;
    exitCommand = new Command(&amp;quot;exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
    nd.addCommand(exitCommand);&lt;br /&gt;
    nd.setCommandListener(this);&lt;br /&gt;
    display.setCurrent(nd);&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable s) {&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class Navigate2Canvas extends Canvas {&lt;br /&gt;
  private Image image;&lt;br /&gt;
  private int newX = 0;&lt;br /&gt;
  private int newY = 0;&lt;br /&gt;
  private int stepX = 0;&lt;br /&gt;
  private int stepY = 0;&lt;br /&gt;
  public Navigate2Canvas(Image image) {&lt;br /&gt;
    this.image = image;&lt;br /&gt;
    newX = 0;&lt;br /&gt;
    newY = 0;&lt;br /&gt;
    stepX = getWidth() / 4;&lt;br /&gt;
    stepY = getHeight() / 4;&lt;br /&gt;
  }&lt;br /&gt;
  public void steppingXY(int x, int y) {&lt;br /&gt;
    newX += x;&lt;br /&gt;
    newY += y;&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    int width = this.getWidth();&lt;br /&gt;
    int height = this.getHeight();&lt;br /&gt;
    g.setGrayScale(255);&lt;br /&gt;
    g.fillRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.setGrayScale(0);&lt;br /&gt;
    g.drawRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.translate(newX, newY);&lt;br /&gt;
    g.drawImage(image, 0, 0, g.TOP | g.LEFT);&lt;br /&gt;
  }&lt;br /&gt;
  protected void keyPressed(int keyCode) {&lt;br /&gt;
    int gameaction = getGameAction(keyCode);&lt;br /&gt;
    switch (gameaction) {&lt;br /&gt;
    case UP:&lt;br /&gt;
      steppingXY(0, stepY);&lt;br /&gt;
      break;&lt;br /&gt;
    case DOWN:&lt;br /&gt;
      steppingXY(0, -stepY);&lt;br /&gt;
      break;&lt;br /&gt;
    case LEFT:&lt;br /&gt;
      steppingXY(stepX, 0);&lt;br /&gt;
      break;&lt;br /&gt;
    case RIGHT:&lt;br /&gt;
      steppingXY(-stepX, 0);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Canvas key pressed and key typed events ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* License&lt;br /&gt;
 * &lt;br /&gt;
 * Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 * &lt;br /&gt;
 * Redistribution and use in source and binary forms, with or without&lt;br /&gt;
 * modification, are permitted provided that the following conditions&lt;br /&gt;
 * are met:&lt;br /&gt;
 *  &lt;br /&gt;
 *  * Redistribution of source code must retain the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer.&lt;br /&gt;
 * &lt;br /&gt;
 *  * Redistribution in binary form must reproduce the above copyright notice,&lt;br /&gt;
 *      this list of conditions and the following disclaimer in the&lt;br /&gt;
 *      documentation and/or other materials provided with the distribution.&lt;br /&gt;
 * &lt;br /&gt;
 * Neither the name of Sun Microsystems, Inc. or the names of contributors&lt;br /&gt;
 * may be used to endorse or promote products derived from this software&lt;br /&gt;
 * without specific prior written permission.&lt;br /&gt;
 *  &lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING&lt;br /&gt;
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE&lt;br /&gt;
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. (&amp;quot;SUN&amp;quot;)&lt;br /&gt;
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE&lt;br /&gt;
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS&lt;br /&gt;
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST&lt;br /&gt;
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,&lt;br /&gt;
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY&lt;br /&gt;
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,&lt;br /&gt;
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *  &lt;br /&gt;
 * You acknowledge that this software is not designed, licensed or intended&lt;br /&gt;
 * for use in the design, construction, operation or maintenance of any&lt;br /&gt;
 * nuclear facility. &lt;br /&gt;
 */&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class EventEx3 extends MIDlet {&lt;br /&gt;
  Display display;&lt;br /&gt;
  Command exit;&lt;br /&gt;
  public EventEx3() {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
    System.out.println(&amp;quot;App paused.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    Canvas canvas = new Canvas() { // anonymous class&lt;br /&gt;
      public void paint(Graphics g) {&lt;br /&gt;
      }&lt;br /&gt;
      protected void keyPressed(int keyCode) {&lt;br /&gt;
        if (keyCode &amp;gt; 0) {&lt;br /&gt;
          System.out.println(&amp;quot;keyPressed &amp;quot; + ((char) keyCode));&lt;br /&gt;
        } else {&lt;br /&gt;
          System.out.println(&amp;quot;keyPressed action &amp;quot; + getGameAction(keyCode));&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      protected void keyReleased(int keyCode) {&lt;br /&gt;
        if (keyCode &amp;gt; 0) {&lt;br /&gt;
          System.out.println(&amp;quot;keyReleased &amp;quot; + ((char) keyCode));&lt;br /&gt;
        } else {&lt;br /&gt;
          System.out.println(&amp;quot;keyReleased action &amp;quot; + getGameAction(keyCode));&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }; // end of anonymous class&lt;br /&gt;
    exit = new Command(&amp;quot;Exit&amp;quot;, Command.STOP, 1);&lt;br /&gt;
    canvas.addCommand(exit);&lt;br /&gt;
    canvas.setCommandListener(new CommandListener() {&lt;br /&gt;
      public void commandAction(Command c, Displayable d) {&lt;br /&gt;
        if (c == exit) {&lt;br /&gt;
          notifyDestroyed();&lt;br /&gt;
        } else {&lt;br /&gt;
          System.out.println(&amp;quot;Saw the command: &amp;quot; + c);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    display.setCurrent(canvas);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Canvas size ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class CanvasSizeMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
  private Command exitCommand;&lt;br /&gt;
  Display display;&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
    display = Display.getDisplay(this);&lt;br /&gt;
    exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
    Displayable SizeCanvas = new SizeCanvas();&lt;br /&gt;
    SizeCanvas.addCommand(exitCommand);&lt;br /&gt;
    SizeCanvas.setCommandListener(this);&lt;br /&gt;
    display.setCurrent(SizeCanvas);&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable s) {&lt;br /&gt;
    if (c == exitCommand) {&lt;br /&gt;
      destroyApp(false);&lt;br /&gt;
      notifyDestroyed();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class SizeCanvas extends Canvas {&lt;br /&gt;
  int width = 0;&lt;br /&gt;
  int height = 0;&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    width = getWidth();&lt;br /&gt;
    height = getHeight();&lt;br /&gt;
    g.setGrayScale(255);&lt;br /&gt;
    g.fillRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.setGrayScale(0);&lt;br /&gt;
    g.drawString(&amp;quot;Stroke Style:&amp;quot; + g.getStrokeStyle(), 0, 60, Graphics.TOP | Graphics.LEFT);&lt;br /&gt;
    g.drawRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.setStrokeStyle(Graphics.DOTTED);&lt;br /&gt;
    g.drawLine(00, 40, 60, 60);&lt;br /&gt;
    g.drawString(Integer.toBinaryString(width), 0, 0, Graphics.TOP | Graphics.LEFT);&lt;br /&gt;
    g.drawString(Integer.toBinaryString(height), 10, 20, Graphics.TOP | Graphics.LEFT);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  extends Canvas to create your own drawable area ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class CanvasMyMidlet extends MIDlet {&lt;br /&gt;
  public CanvasMyMidlet() { // constructor&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
    Canvas canvas = new MyCanvas();&lt;br /&gt;
    Display display = Display.getDisplay(this);&lt;br /&gt;
    display.setCurrent(canvas);&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyCanvas extends Canvas {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    g.setColor(255, 0, 0);&lt;br /&gt;
    g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
    g.setColor(255, 255, 255);&lt;br /&gt;
    g.drawString(&amp;quot;Hello World!&amp;quot;, 0, 0, g.TOP | g.LEFT);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Get Canvas properties ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Form;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.lcdui.StringItem;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class AttributesMIDlet extends MIDlet &lt;br /&gt;
                        implements CommandListener {&lt;br /&gt;
    private Display display;&lt;br /&gt;
        &lt;br /&gt;
    protected boolean started;&lt;br /&gt;
    private Command exitCommand;&lt;br /&gt;
    &lt;br /&gt;
    protected void startApp() {&lt;br /&gt;
        if (!started) {&lt;br /&gt;
            display = Display.getDisplay(this);&lt;br /&gt;
            Canvas canvas = new DummyCanvas();&lt;br /&gt;
            Form form = new Form(&amp;quot;Attributes&amp;quot;);&lt;br /&gt;
            exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 0);&lt;br /&gt;
            form.addCommand(exitCommand);&lt;br /&gt;
            &lt;br /&gt;
            boolean isColor = display.isColor();&lt;br /&gt;
            form.append(new StringItem(isColor ? &amp;quot;Colors: &amp;quot; : &amp;quot;Grays: &amp;quot;,&lt;br /&gt;
                                String.valueOf(display.numColors())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Width: &amp;quot;, String.valueOf(canvas.getWidth())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Height: &amp;quot;, String.valueOf(canvas.getHeight())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Pointer? &amp;quot;, String.valueOf(canvas.hasPointerEvents())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Motion? &amp;quot;,String.valueOf(canvas.hasPointerMotionEvents())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Repeat? &amp;quot;,String.valueOf(canvas.hasRepeatEvents())));&lt;br /&gt;
            form.append(new StringItem(&amp;quot;Buffered? &amp;quot;, String.valueOf(canvas.isDoubleBuffered())));&lt;br /&gt;
            &lt;br /&gt;
            form.setCommandListener(this);&lt;br /&gt;
            display.setCurrent(form);&lt;br /&gt;
            &lt;br /&gt;
            started = true;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    protected void pauseApp() {&lt;br /&gt;
    }&lt;br /&gt;
    protected void destroyApp(boolean unconditional) {&lt;br /&gt;
    }&lt;br /&gt;
    public void commandAction(Command c, Displayable d) {&lt;br /&gt;
        if (c == exitCommand) {&lt;br /&gt;
            notifyDestroyed();&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
    static class DummyCanvas extends Canvas {&lt;br /&gt;
        protected void paint(Graphics g) {&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Navigatable Canvas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.lcdui.Image;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class NavigateMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
  int stepX;&lt;br /&gt;
  int stepY;&lt;br /&gt;
  private Command leftCommand;&lt;br /&gt;
  private Command rightCommand;&lt;br /&gt;
  private Display display;&lt;br /&gt;
  Displayable nd;&lt;br /&gt;
  Image image = null;&lt;br /&gt;
  public NavigateMIDlet() {&lt;br /&gt;
    try {&lt;br /&gt;
      image = Image.createImage(&amp;quot;/M.png&amp;quot;);&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
    }&lt;br /&gt;
    Display display = Display.getDisplay(this);&lt;br /&gt;
    nd = new NavigateCanvas(image);&lt;br /&gt;
    stepX = ((NavigateCanvas) nd).getWidth() / 4;&lt;br /&gt;
    stepY = ((NavigateCanvas) nd).getHeight() / 4;&lt;br /&gt;
    leftCommand = new Command(&amp;quot;&amp;lt;Left&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
    rightCommand = new Command(&amp;quot;Right&amp;gt;&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
    nd.addCommand(rightCommand);&lt;br /&gt;
    nd.addCommand(leftCommand);&lt;br /&gt;
    nd.setCommandListener(this);&lt;br /&gt;
    display.setCurrent(nd);&lt;br /&gt;
  }&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable d) {&lt;br /&gt;
    if (d == nd &amp;amp;&amp;amp; c == leftCommand) {&lt;br /&gt;
      ((NavigateCanvas) nd).steppingXY(stepX, 0);&lt;br /&gt;
      ((NavigateCanvas) nd).repaint();&lt;br /&gt;
    } else if (d == nd &amp;amp;&amp;amp; c == rightCommand) {&lt;br /&gt;
      ((NavigateCanvas) nd).steppingXY(-stepX, 0);&lt;br /&gt;
      ((NavigateCanvas) nd).repaint();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class NavigateCanvas extends Canvas {&lt;br /&gt;
  private Image image;&lt;br /&gt;
  private int newX = 0;&lt;br /&gt;
  private int newY = 0;&lt;br /&gt;
  public NavigateCanvas(Image image) {&lt;br /&gt;
    this.image = image;&lt;br /&gt;
    newX = 0;&lt;br /&gt;
    newY = 0;&lt;br /&gt;
  }&lt;br /&gt;
  public void steppingXY(int x, int y) {&lt;br /&gt;
    newX += x;&lt;br /&gt;
    newY += y;&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    int width = this.getWidth();&lt;br /&gt;
    int height = this.getHeight();&lt;br /&gt;
    g.setGrayScale(255);&lt;br /&gt;
    g.fillRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.setGrayScale(0);&lt;br /&gt;
    g.drawRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.translate(newX, newY);&lt;br /&gt;
    g.drawImage(image, 0, 0, g.TOP | g.LEFT);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use Canvas to draw a clock ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.microedition.lcdui.Canvas;&lt;br /&gt;
import javax.microedition.lcdui.rumand;&lt;br /&gt;
import javax.microedition.lcdui.rumandListener;&lt;br /&gt;
import javax.microedition.lcdui.Display;&lt;br /&gt;
import javax.microedition.lcdui.Displayable;&lt;br /&gt;
import javax.microedition.lcdui.Graphics;&lt;br /&gt;
import javax.microedition.midlet.MIDlet;&lt;br /&gt;
public class ClockMIDlet extends MIDlet implements CommandListener {&lt;br /&gt;
  private Command exitCommand;&lt;br /&gt;
  Display display;&lt;br /&gt;
  public void startApp() {&lt;br /&gt;
    Display display = Display.getDisplay(this);&lt;br /&gt;
    Displayable d = new ClockCanvas(10, 10, 10);&lt;br /&gt;
    exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
    d.addCommand(exitCommand);&lt;br /&gt;
    d.setCommandListener(this);&lt;br /&gt;
    display.setCurrent(d);&lt;br /&gt;
  }&lt;br /&gt;
  public void pauseApp() {&lt;br /&gt;
  }&lt;br /&gt;
  public void destroyApp(boolean unconditional) {&lt;br /&gt;
  }&lt;br /&gt;
  public void commandAction(Command c, Displayable s) {&lt;br /&gt;
    notifyDestroyed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class ClockCanvas extends Canvas {&lt;br /&gt;
  private int hour;&lt;br /&gt;
  private int minute;&lt;br /&gt;
  private int second;&lt;br /&gt;
  protected int xCenter, yCenter;&lt;br /&gt;
  protected int clockRadius;&lt;br /&gt;
  int width = 0;&lt;br /&gt;
  int height = 0;&lt;br /&gt;
  ClockCanvas(int hour, int minute, int second) {&lt;br /&gt;
    this.hour = hour;&lt;br /&gt;
    this.minute = minute;&lt;br /&gt;
    this.second = second;&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    width = getWidth();&lt;br /&gt;
    height = getHeight();&lt;br /&gt;
    g.setGrayScale(255);&lt;br /&gt;
    g.fillRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    g.setGrayScale(0);&lt;br /&gt;
    g.drawRect(0, 0, width - 1, height - 1);&lt;br /&gt;
    clockRadius = Math.min(width, height) - 20;&lt;br /&gt;
    xCenter = getWidth() / 2;&lt;br /&gt;
    yCenter = getHeight() / 2;&lt;br /&gt;
    g.drawArc(10, 12, clockRadius, clockRadius, 0, 360);&lt;br /&gt;
    g.drawString(&amp;quot;12&amp;quot;, xCenter, 0, Graphics.TOP | Graphics.HCENTER);&lt;br /&gt;
    g.drawString(&amp;quot;9&amp;quot;, 1, yCenter, Graphics.BASELINE | Graphics.LEFT);&lt;br /&gt;
    g.drawString(&amp;quot;3&amp;quot;, width - 1, yCenter, Graphics.BASELINE | Graphics.RIGHT);&lt;br /&gt;
    g.drawString(&amp;quot;6&amp;quot;, xCenter, height, Graphics.BOTTOM | Graphics.RIGHT);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>