J2ME例子-SampleCanvas

package demo;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/*
 * A quick sample of graphics,  commands, and event handling.
 */
public class SampleCanvasMIDlet extends MIDlet implements CommandListener {
 Display display;

 Command exitCommand;

 Command backCommand;

 Command okCommand;

 SampleCanvas sample; // Instance of sample canvas

 List itemMenu;

 List exclusiveList;

 List multipleList;

 TextBox textbox;

 Ticker ticker;

 Alert alert;

 Form form;

 StringItem stringItem;

 ImageItem imageItem;

 Image image;

 TextField textItem;

 ChoiceGroup choiceItem;

 DateField dateItem;

 Gauge gaugeItem;

 public SampleCanvasMIDlet() {
  display = Display.getDisplay(this);
  exitCommand = new Command("Exit", Command.EXIT, 1);
  backCommand = new Command("Back", Command.BACK, 2);
  okCommand = new Command("OK", Command.OK, 3);

  ticker = new Ticker("Select an item to display");
  itemMenu = new List(null, Choice.IMPLICIT);
  itemMenu.append("Canvas", null);
  itemMenu.append("Form", null);
  itemMenu.append("Alert", null);
  itemMenu.append("TextBox", null);
  itemMenu.append("Exclusive List", null);
  itemMenu.append("Multiple Choice", null);

  itemMenu.setCommandListener(this);
  itemMenu.addCommand(exitCommand);
  itemMenu.setTicker(ticker);
  display.setCurrent(itemMenu);
 }

 public void startApp() {
 }

 public void destroyApp(boolean unconditional) {
 }

 public void pauseApp() {
 }

 public void commandAction(Command c, Displayable s) {
  if (c == backCommand) {
   display.setCurrent(itemMenu);
  } else if (s == itemMenu) {
   if (c == List.SELECT_COMMAND) {
    // Handle the item sected to be displayed
    int i = itemMenu.getSelectedIndex();
    switch (i) {
    case 0: // Show Sample canvas              display.setCurrent(getCanvas());
     break;
    case 1: // Show the form
     display.setCurrent(getForm());
     break;
    case 2: // Show an alert
     display.setCurrent(getAlert("Warning",
       "This window will dismiss in two seconds."));
     break;
    case 3: // Show TextBox
     display.setCurrent(getTextBox());
     break;
    case 4: // Show Exclusive list
     display.setCurrent(getExclusiveList());
     break;
    case 5: // Show Multiple List
     display.setCurrent(getMultipleList());
     break;
    }
   } else if (c == exitCommand) {
    notifyDestroyed();
   }
  } else if (s == exclusiveList) {
   int i = exclusiveList.getSelectedIndex();
   String value = exclusiveList.getString(i);
   alert = getAlert("Border selected:", value);
   display.setCurrent(alert, itemMenu);
  } else if (s == multipleList) {
   StringBuffer b = new StringBuffer();
   for (int i = 0; i <= 2; i++) {
    if (multipleList.isSelected(i)) {
     b.append(multipleList.getString(i));
     b.append("/n");
    }
   }
   alert = getAlert("Colors selected:", b.toString());
   display.setCurrent(alert, itemMenu);
  } else if (s == textbox) {
   String value = textbox.getString();
   alert = getAlert("Text Entered:", value);
   display.setCurrent(alert, itemMenu);
  } else if (s == form) {
   alert = getAlert("Image options  saved", "");
   display.setCurrent(alert, itemMenu);
  }
 }

 SampleCanvas getCanvas() {
  if (sample == null) {
   sample = new SampleCanvas();
   sample.addCommand(backCommand);
   sample.setCommandListener(this);
  }
  return sample;
 }

 List getExclusiveList() {
  if (exclusiveList == null) {
   exclusiveList = new List("Border Style", Choice.EXCLUSIVE);
   exclusiveList.append("None", null);
   exclusiveList.append("Plain", null);
   exclusiveList.append("Fancy", null);
   exclusiveList.addCommand(backCommand);
   exclusiveList.addCommand(okCommand);
   exclusiveList.setCommandListener(this);
  }
  return exclusiveList;
 }

 List getMultipleList() {
  if (multipleList == null) {
   multipleList = new List("Colors to mix", Choice.MULTIPLE);
   multipleList.append("Red", null);
   multipleList.append("Green", null);
   multipleList.append("Blue", null);
   multipleList.addCommand(backCommand);
   multipleList.addCommand(okCommand);
   multipleList.setCommandListener(this);
  }
  return multipleList;
 }

 TextBox getTextBox() {
  if (textbox == null) {
   textbox = new TextBox("Enter a phone number", "", 40,
     TextField.PHONENUMBER);
   textbox.addCommand(backCommand);
   textbox.addCommand(okCommand);
   textbox.setCommandListener(this);
  }
  return textbox;
 }

 Alert getAlert(String title, String contents) {
  if (alert == null) {
   alert = new Alert(title);
   alert.setType(AlertType.WARNING);
   alert.setTimeout(2000);
   alert.setString(contents);
  } else {
   alert.setTitle(title);
   alert.setString(contents);
  }
  return alert;
 }

 Form getForm() {
  if (form == null) {
   form = new Form("Options");

   try {
    image = Image.createImage("/images/PhotoAlbum.png");
    imageItem = new ImageItem("Preview:", image,
      ImageItem.LAYOUT_NEWLINE_BEFORE, "Mountain");
    form.append(imageItem);
   } catch (java.io.IOException ex) {
   }

   textItem = new TextField("Title:", "Mountain", 32, TextField.ANY);
   form.append(textItem);
   dateItem = new DateField("Date:", DateField.DATE);
   dateItem.setDate(new java.util.Date());
   form.append(dateItem);

   choiceItem = new ChoiceGroup("Size:", Choice.EXCLUSIVE);
   choiceItem.append("Small", null);
   choiceItem.append("Large", null);
   form.append(choiceItem);
   gaugeItem = new Gauge("Speed:", true, 10, 5);
   form.append(gaugeItem);

   form.addCommand(backCommand);
   form.addCommand(okCommand);
   form.setCommandListener(this);
  }
  return form;
 }
}

class SampleCanvas extends Canvas {
 int x, y; // Location of cross hairs

 String event = ""; // Last key event type

 int keyCode; // Last keyCode pressed

 Font font; // Font used for drawing text

 int fh; // height of the font

 int w, h; // width and height of the canvas

 int titleHeight; // Height of the title

 int pieSize; // Size of the Pie chart used for width and height

 int barSize; // Size of the Bar chart used for width and height

 int eventHeight; // Size of the event region

 int pad; // Padding used between items

 SampleCanvas() {
  w = getWidth();
  h = getHeight();
  font = Font
    .getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
  fh = font.getHeight();

  /* Compute the sizes of the bar and pie charts   * It should use all the space except for the title
   * and event regions.
   * Don't let the charts get too small
   */
  pad = 2;
  titleHeight = fh + pad * 2;
  eventHeight = fh * 3;
  barSize = h - (titleHeight + pad) - (eventHeight + pad);
  if (barSize < 20) // Don't let them get too small
   barSize = 20;
  if (barSize > (w - pad) / 2) // Shrink to 1/2 width
   barSize = (w - pad) / 2;
  pieSize = barSize;
 }

 protected void keyPressed(int key) {
  keyCode = key;
  event = "Pressed";
  handleActions(key);
  repaint();
 }

 protected void keyRepeated(int key) {
  keyCode = key;
  event = "Repeated";
  handleActions(key);
  repaint();
 }

 protected void keyReleased(int key) {
  keyCode = key;
  event = "Released";
  repaint();
 }

 protected void pointerPressed(int x, int y) {
  this.x = x;
  this.y = y;
  keyCode = 0;
  event = "Pressed";
  repaint();
 }

 protected void pointerReleased(int x, int y) {
  this.x = x;
  this.y = y;
  keyCode = 0;
  event = "Released";
  repaint();
 }

 protected void pointerDragged(int x, int y) {
  this.x = x;
  this.y = y;
  keyCode = 0;
  event = "Dragged";
 }

 void handleActions(int keyCode) {
  int action = getGameAction(keyCode);
  switch (action) {
  case LEFT:
   x -= 1;
   break;
  case RIGHT:
   x += 1;
   break;
  case UP:
   y -= 1;
   break;
  case DOWN:
   y += 1;
   break;
  }
 }

 protected void paint(Graphics g) {

  g.setFont(font);
  g.setGrayScale(255);
  g.fillRect(0, 0, w, h);

  x = (x < 0) ? w - 1 : x;
  y = (y < 0) ? h - 1 : y;
  x = x % w;
  y = y % h;

  // Draw Fill and outline for background of title Text
  int swidth = pad * 2 + font.stringWidth("Pie and Bar Samples");
  int title_x = (w - swidth) / 2;

  g.setGrayScale(128);
  g.fillRoundRect(title_x, 0, swidth, fh, 5, 5);
  g.setGrayScale(0);
  g.drawRoundRect(title_x, 0, swidth, fh, 5, 5);

  // Sample Text
  g.setColor(0, 0, 0);
  g.drawString("Pie and Bar Samples", title_x + pad, pad, Graphics.TOP
    | Graphics.LEFT);

  // Translate to below title text
  g.translate(0, titleHeight + pad);

  /*
   * Draw pie chart on the left side
   * using the barSize for width and height
   */
  g.setColor(255, 0, 0);
  g.fillArc(0, 0, pieSize, pieSize, 45, 270);
  g.setColor(0, 255, 0);
  g.fillArc(0, 0, pieSize, pieSize, 0, 45);
  g.setColor(0, 0, 255);
  g.fillArc(0, 0, pieSize, pieSize, 0, -45);
  g.setColor(0);
  g.drawArc(0, 0, pieSize, pieSize, 0, 360);

  // Draw Bar chart on right side of the display
  // scale the values to the pieSize maximum value
  int yorig = barSize;
  int h1 = barSize / 3, h2 = barSize / 2, h3 = barSize;
  int avg = (h1 + h2 + h3) / 3;

  // Move over to draw Bar chart
  g.translate((w + pad) / 2, 0);

  int bw = pieSize / 7;
  if (bw < 2)
   bw = 2;
  g.setColor(255, 0, 0);
  g.fillRect(bw * 1, yorig - h1, bw + 1, h1);
  g.setColor(0, 255, 0);
  g.fillRect(bw * 3, yorig - h2, bw + 1, h2);
  g.setColor(0, 0, 255);
  g.fillRect(bw * 5, yorig - h3, bw + 1, h3);
  g.setColor(0);
  g.drawRect(bw * 1, yorig - h1, bw, h1);
  g.drawRect(bw * 3, yorig - h2, bw, h2);
  g.drawRect(bw * 5, yorig - h3, bw, h3);

  // Draw axis for bar chart.
  g.setGrayScale(0);
  g.drawLine(0, 0, 0, yorig);
  g.drawLine(0, yorig, barSize, yorig);
  g.setStrokeStyle(Graphics.DOTTED);
  g.drawLine(0, yorig - avg, barSize, yorig - avg);
  g.setStrokeStyle(Graphics.SOLID);

  // Restore to left and move down
  g.translate(-(w + pad) / 2, pieSize + pad);

  // Draw the key and pointer status
  g.setColor(128, 128, 128);
  int col1 = font.stringWidth("Action:");
  g.drawString("Key: ", col1, 0, Graphics.TOP | Graphics.RIGHT);
  g.drawString(keyString(keyCode), col1, 0, Graphics.TOP | Graphics.LEFT);
  g.drawString("Action:", col1, fh, Graphics.TOP | Graphics.RIGHT);
  g.drawString(actionString(keyCode), col1, fh, Graphics.TOP
    | Graphics.LEFT);
  g.drawString("Event:", col1, fh * 2, Graphics.TOP | Graphics.RIGHT);
  g.drawString(event, col1, fh * 2, Graphics.TOP | Graphics.LEFT);
  int col2 = 80;
  g.drawString("x:", col2, 0, Graphics.TOP | Graphics.RIGHT);
  g
    .drawString(Integer.toString(x), col2, 0, Graphics.TOP
      | Graphics.LEFT);
  g.drawString("y:", col2, fh, Graphics.TOP | Graphics.RIGHT);
  g.drawString(Integer.toString(y), col2, fh, Graphics.TOP
    | Graphics.LEFT);

  // Restore the origin and draw the crosshairs on top
  g.translate(-g.getTranslateX(), -g.getTranslateY());

  g.setColor(0, 0, 0);
  g.drawLine(x, y - 5, x, y + 5);
  g.drawLine(x - 5, y, x + 5, y);
 }

 String keyString(int keyCode) {
  if (keyCode == 0) {
   return "";
  }
  return Integer.toString(keyCode);
 }

 String actionString(int keyCode) {
  if (keyCode == 0) {
   return "";
  }

  int action = getGameAction(keyCode);
  switch (action) {
  case FIRE:
   return "Fire";
  case LEFT:
   return "Left";
  case RIGHT:
   return "Right";
  case DOWN:
   return "Down";
  case UP:
   return "Up";
  case GAME_A:
   return "Game A";
  case GAME_B:
   return "Game B";
  case GAME_C:
   return "Game C";
  case GAME_D:
   return "Game D";
  case 0:
   return "";
  default:
   return Integer.toString(action);
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值