J2ME概要

来源:互联网 发布:数据挖掘 王灿 视频 编辑:程序博客网 时间:2024/05/16 15:36

 

 

0. J2ME DEMO
 
    0.1. KeyMapping.java
 
        按键操作相关
     
    0.2. ScratchPad.java
 
        触摸屏(或鼠标)绘图,touch_screen=true
     
    0.3. DrawShapes.java
 
        圆弧绘制
     
    0.4. FontViewer.java、 FontCanvas.java、 PrefsForm.java

        字体相关_多页面切换

    0.5 DrawImage.java

        在内存中绘制图片

    0.6 EventProcessing.java

        主程序框架_命令处理_事件处理

    0.7 DateFieldTest.java

        使用日期事件组件

    0.8 InteractiveGauge.java

        使用进度条组件Gauge

    0.9 StringItemTest.java

        使用字符标签组件 StringItem

    0.10 TextFieldTest.java

        使用字符输入组件TextField

    0.11 ChoiceGroupTest.java

        使用选择组件ChoiceGroup

    0.12 ImageTest.java

        使用ImageItem和Image组件

    0.13 ImplicitList.java

        使用List组件(模拟菜单)

    0.14 TextBoxTest.java

        使用多行文本组件TextBox

    0.15 AlertTest.java

        使用信息提示组件Alert

    0.16 TickerTest.java

        使用滚动字幕组件Ticker

    0.17 AppRuntimeDetect.java、ConfigMIDlet.java

        获取当前硬件设备的媒体处理能力集

    0.18 ReadWrite.java

        访问手机记录管理系统
 
 
1. 高层 MIDP 事件分为两类: Command 和 Item 事件

2. 可以管理命令的 MIDP 组件只有 Form、TextBox、List 和 Canvas

3. 除了 StringItem、Spacer 和 ImageItem,每一个 Item 都可以识别 Item 事件。

4. Ticker 是 Screen 的一个属性,所以所有的 Screen 子类都可以调用。

5. Canvas 的坐标系原点在左上角。

6. 两个 Display 方法

    boolean isColor()    设备是否支持彩色
    int numColors()        设备支持的颜色数

7. Graphics 类颜色支持方法

    void setColor(int RGB)
    void setColor(int red, int green, int blue)

    int getColor()
    int getBlueComponent()
    int getGreenComponent()
    int getRedComponent()

    void setGrayScale(int value)
    int getGrayScale()

8. Graphics 类笔划类型

    int getStrokeStyle()
    void setStrokeStyle(int style)

    Graphics.DOTTED        虚线
    Graphics.SOLID        实线

9. Graphics 类绘制弧形

    9.1 绘制弧时,可以将它绘制为轮廓线或者填充它。

        void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)    轮廓
        void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)    填充
   
    9.2 首先指定一个假想盒的外部尺寸(也称为 bounding box),弧是绘制在这个盒子内部的。

    9.3 start angle 确定弧从 3 点钟的位置开始绘制起始点。正值是反时针方向。

    9.4 arc angle 指定从起始角度按反时针方向绘制多少度。

        g.drawArc(10, 10, 100, 100, 0, 150);

        在位于 10,10 到 100,100 的 bounding box 中绘制弧,弧的 start angle 是 0,arc angle 为 150。

10.  Graphics 类绘制矩形

    10.1 与弧一样,矩形也可以是轮廓或者填充的。此外,可以指定矩形是直角或者圆角的。

        void drawRect(int x, int y, int width, int height)
        void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

        void fillRect(int x, int y, int width, int height)
        void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)


    10.2 在绘制圆角时,指定水平直径 (arcWidth)和垂直直径(arcHeight)。这些参数定义了弧在每个方向上的尖锐程度。更大的值表示更平缓的弧,更小的值会收紧曲线。

11. Graphics 类使用字体

    11.1 Font 类的方法:

        Font getFont(int face, int style, int size)
        Font getFont(int fontSpecifier)
        Font getDefaultFont()    // 返回系统定义的字体。

        Font font = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_ITALIC, Font.SIZE_MEDIUM);
        Font font = Font.getFont(Font.FONT_INPUT_TEXT);

    11.2 Font 属性

        FACE_SYSTEM
        FACE_MONOSPACE
        FACE_PROPORTIONAL

        STYLE_PLAIN
        STYLE_BOLD
        STYLE_ITALIC
        STYLE_UNDERLINED

        SIZE_SMALL
        SIZE_MEDIUM
        SIZE_LARGE

        Style 参数可以与逻辑 (|) 操作符结合使用,如下所示:

12. Graphics 类使用定位点

    12.1 除了指定在什么位置显示一串字符的 x 和 y 坐标外,定位点让您可以指定在围绕文字的边界框中什么地方放置 x 和 y 坐标。

    12.2 有六个定义好的定位点,三个水平的和三个垂直的。在指定绘制文字的定位点时,定位点是成对使用的,所以必须选择一个水平和一个垂直点。下面列出的可用的定位点:

        水平  LEFT HCENTER RIGHT
        垂直  TOP BASELINE BOTTOM

13. Graphics 类绘制文字

    void drawChar(char character, int x, int y, int anchor)
    void drawChars(char[] data, int offset, int length, int x, int y, int anchor)
    void drawString(String str, int x, int y, int anchor)
    void drawSubstring(String str, int offset, int len, int x, int y, int anchor)

14. Graphics 类绘制图像的方法

    drawImage(Image img, int x, int y, int anchor)
 
    我们用绘制文字的同样步骤绘制图像。都是首先建立 x 和 y 坐标以及定位点。
    不过,图像的一组定位点与文字的稍有不同。与文字不一样,图像有一个中心点。
    因此在处理图像时,VCENTER 代替了 BASELINE。下面显示了图像定位点:
 
    水平  LEFT HCENTER RIGHT
    垂直  TOP VCENTER BOTTOM

15. 其他 Graphics 方法
 
    15.1 clip() 剪切区域(clipping region) 定义了设备显示屏中在刷新操作时将会更新的区域。下面是剪切方法:
 
        void setClip(int x, int y, int width, int height)
        void clipRect(int x, int y, int width, int height)
        int getClipX()
        int getClipY()
        int getClipWidth()
        int getClipHeight()
 
    15.2 translate() 是涉及坐标系统的一个方法。到目前为止,我们假设坐标 0,0 总是设备显示屏的左上角。事实上,可以转换这个坐标系统,使原点具有不同的 x,y 位置,如下所示:
 
        void translate(int x, int y)
        int getTranslateX()
        int getTranslateY()
 
16. Game API

    16.1 与我们熟悉的 Canvas 类一样,GameCanvas 提供了创建用户界面的基础。GameCanvas 对每一个类实例包含一个单独的 off-screen 缓存,并提供了内建的查询游戏键的状态的方法。

    16.2 Layer 是用于表示游戏中一个可视对象的抽象类。

    16.3 Sprite 是 Layer 的子类,它的作用是表示一个图像。Sprite 常常由几个帧组成。要执行动画,按顺序显示帧以产生移动图像的效果。还可以对 Sprite 进行像旋转或者翻转这样的转换。

    16.4 TiledLayer 是 Layer 的子类,它模拟电子表格,其中每一个单元格表示一个图像。TiledLayer 通常用于表示大型可视元素,如游戏背景。

    16.5 LayerManager 维护一个 Layer 的有序列表,并确定每一个 Layer 的哪一部分需要绘制,并以正确的顺序进行绘制。

17. 手机记录管理系统

    17.1 创建或打开一个已有的记录系统

        RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary)
       
        recordStoreName        记录系统名称
        createIfNecessary    如果指定名称的记录系统不存在,是否要创建一个新的系统。

    17.2 新增记录

        addRecord(byte[] data, int offset, int numBytes)

        data        待插入数据的字节数组
        offset        取值起点索引
        numBytes    取值数量

    17.3 遍历记录系统

        try {
            int nId = 0;
            RecordEnumeration re = rs.enumerateRecords(null, null, false);
            while (re.hasNextElement()) {
                String str = new String(re.nextRecord());
                System.out.println("Record #" + (++nId) + ": " + str);
                System.out.println("=============================");
            }
        } catch (Exception e) {
            db(e.toString());
        }

    17.4 排序

        //********************************************************
        //Create comparator class for sorting
        //********************************************************
        class comparator implements RecordComparator
        {
          public int compare(byte[] rec1, byte[] rec2)
          {
            String str1 = new String(rec1), str2 = new String(rec2);
            int result = str1.compareTo(str2);
            if (result == 0)
              return RecordComparator.EQUIVALENT;
            else if (result 《 0){
              return RecordComparator.PRECEDES;
            }
            else
              return RecordComparator.FOLLOWS;
          }
        }

        RecordEnumeration re = rs.enumerateRecords(null, new comparator(), false);

    17.5 过滤

        //********************************************************
        //Create filter class for searching
        //********************************************************
        class SearchFilter implements RecordFilter
        {
          private String searchText = null;
          public SearchFilter(String searchText)
          {
            // Text to find
            this.searchText = searchText.toLowerCase();
          }
          public boolean matches(byte[] candidate)
          {
            String str = new String(candidate).toLowerCase();
            // Does the text exist?
            if (searchText != null && str.indexOf(searchText) != -1)
              return true;
            else
              return false;
          }
        }       

        RecordEnumeration re = rs.enumerateRecords(new SearchFilter("xxx"), new comparator(), false);

    17.6 监听

        // ********************************************************
        // Listener to process updates to the record store
        // ********************************************************
        class DemoRecordListener implements RecordListener {
            public void recordAdded(RecordStore recordStore, int recordId) {
                System.out.println("==Record added:" + recordId);
            }

            public void recordDeleted(RecordStore recordStore, int recordId) {
                System.out.println("==Record deleted:" + recordId);
            }

            public void recordChanged(RecordStore recordStore, int recordId) {
                System.out.println("==Record changed:" + recordId);
            }
        }

        RecordStore rs = RecordStore.openRecordStore(REC_STORE, true);
        rs.addRecordListener(new DemoRecordListener());