WEB开发网
开发学院软件开发Java 一个图形用户界面绘画和事件处理的案例 阅读

一个图形用户界面绘画和事件处理的案例

 2007-12-23 12:37:43 来源:WEB开发网   
核心提示:import javax.microedition.midlet.*;import javax.microedition.lcdui.*;/* * A quick sample of graphics,commands, and event handling. */public class SampleCanvasMI

一个图形用户界面绘画和事件处理的案例

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.TOPGraphics.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.TOPGraphics.RIGHT);
    g.drawString(keyString(keyCode), col1, 0,
     Graphics.TOPGraphics.LEFT);
    g.drawString("Action:",  col1,   fh,
     Graphics.TOPGraphics.RIGHT);
    g.drawString(actionString(keyCode), col1, fh,
     Graphics.TOPGraphics.LEFT);
    g.drawString("Event:",   col1,   fh*2,
     Graphics.TOPGraphics.RIGHT);
    g.drawString(event,    col1,   fh*2,
     Graphics.TOPGraphics.LEFT);
    int col2 = 80;
    g.drawString("x:",     col2,   0,
     Graphics.TOPGraphics.RIGHT);
    g.drawString(Integer.toString(x), col2, 0,
     Graphics.TOPGraphics.LEFT);
    g.drawString("y:",     col2,   fh,
     Graphics.TOPGraphics.RIGHT);
    g.drawString(Integer.toString(y), col2, fh,
     Graphics.TOPGraphics.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);
 }
  }
}


(出处:http://www.cncms.com)


Tags:一个 图形 用户界面

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接