`
wangxc
  • 浏览: 210499 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lwuit---小细节疑难杂症整理

    博客分类:
  • J2ME
阅读更多
1、textArea 显示文本内容,在部分手机上无法显示全部内容,每一行的最后几个字被挡住
琢磨了很久终于找了出来,解决方案如下:
  TextArea txtContent = new TextArea(strContent, 12, 24);
  //添加这一句即可
  txtContent.setWidestChar('一');

2、若要对文本框中的内容设置补丁:
txtContent.getStyle().setPadding(Component.RIGHT, 10);
内容往右10像素。

3、如果list上不想要显示文字多余时的省略号
  name.setEndsWith3Points(false);

4、重写Dialog要让标题与Form的样式一致
dialog.show(100, 100,100,100, true);

5、声音播放
try {
     InputStream is = getClass().getResourceAsStream(
       "/res/NewMailSound.wav");
     Player player = Manager.createPlayer(is, "audio/x-wav");
     player.start();
    } catch (Exception e) {
     e.printStackTrace();
    }

6、使得TextField也能够在触屏手机上点击时出现输入编辑
解决方法:
在TextField源码上 加上editString();函数:
public void pointerReleased(int x, int y) {
        // unlike text area the text field supports shifting the cursor with the touch screen
     editString();
        String text = getText();
        int textLength = text.length();
        int position = 0;
        Font f = getStyle().getFont();
        x -= getAbsoluteX();
        for(int iter = 0 ; iter < textLength ; iter++) {
            int width = f.substringWidth(text, 0, iter);
            if(x > width) {
                position = iter;
            } else {
                break;
            }
        }
        if(position == textLength - 1) {
            if(f.stringWidth(text) < x) {
                position = textLength;
            }
        }
        setCursorPosition(position);
        repaint();
    }

或者官方的解决方法:http://forums.java.net/jive/thread.jspa?threadID=52716

7、震动
public void MakeVibrate() {
  new Thread() {
   public void run() {
    try {
     Display.getInstance().vibrate(2000);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  }.start();
}


8、导致内存激增的原因(可以用自动模拟器的内存检测器进行监测C:\WTK2.5.2\bin\prefs.exe将你要的设置勾选)
而lwuit里面的源码有两句是会导致内存一直占用,一个是TextField中的这段代码

// public boolean animate() {
    // boolean ani = super.animate();
    // if (hasFocus()) {
    // long currentTime = System.currentTimeMillis();
    // if (drawCursor) {
    // if ((currentTime - cursorBlinkTime) > blinkOnTime) {
    // cursorBlinkTime = currentTime;
    // drawCursor = false;
    // return true;
    // }
    // } else {
    // if ((currentTime - cursorBlinkTime) > blinkOffTime) {
    // cursorBlinkTime = currentTime;
    // drawCursor = true;
    // return true;
    // }
    // }
    // if (pressedAndNotReleased) {
    // if (currentTime - pressTime >= getLongClickDuration()) {
    // longClick(pressedKeyCode);
    // }
    // } else {
    // if (pendingCommit && currentTime - releaseTime > commitTimeout) {
    // commitChange();
    // }
    // }
    // } else {
    // drawCursor = false;
    // }
    // return ani;
    // }

一个是Display
lwuitGraphics.setGraphics(impl.getNativeGraphics());
这两个暂时还没有仔细去研究,但是确实吃内存的所在。
还有就是要巧用System.gc();进行内存回收,这样就会尽量的减少内存溢出的情况。

9、滚动条拖拽方向与内容显示相反,component中的代码修改如下

public void pointerDragged(int x, int y) {
        if (isScrollable() && isSmoothScrolling()) {
            int axisValue;
            if (isScrollableY()) {
                axisValue = y;
            } else {
                axisValue = x;
            }

            if (!dragActivated) {
                dragActivated = true;
                beforeLastScrollY = axisValue;
                lastScrollY = axisValue;
                getComponentForm().setDraggedComponent(this);
            }
            //save time and locations to create velocity when the 
            //pointer is released
            long currentTime = System.currentTimeMillis();
            if (currentTime != lastTime[(pLastDragged + lastTime.length + 1) % lastTime.length]) {
                lastTime[pLastDragged] = System.currentTimeMillis();
                lastDragged[pLastDragged] = axisValue;
                pLastDragged = (++pLastDragged) % lastTime.length;
            }

            beforeLastScrollY = lastScrollY;
            lastScrollY = axisValue;

            // we drag inversly to get a feel of grabbing a physical screen
            // and pulling it in the reverse direction of the drag
            if (isScrollableY()) {
                int scroll = getScrollY() - (beforeLastScrollY - axisValue);
                if (scroll >= 0 && scroll < getPreferredH() - getHeight()) {
                    setScrollY(scroll);
                }
            } else {
                int scroll = getScrollX() - (beforeLastScrollY - axisValue);
                if (scroll >= 0 && scroll < getPreferredW() - getWidth()) {
                    setScrollX(scroll);
                }
            }
        } else {
            //try to find a scrollable element until you reach the Form
            Component parent = getParent();
            if (!(parent instanceof Form)) {
                parent.pointerDragged(x, y);
            }
        }
    }


10、开启wtk模拟器的触摸屏功能
打开\wtklib\devices\DefaultColorPhone目录下的DefaultColorPhone.properties文件(最好先安装一个UltraEdit之类的文本编辑器)。
然后找到touch_screen选项,修改为touch_screen=true

11、设置模拟器权限,以免开发过程中弹出烦人的提示
打开wtk模拟器。
选择Edit->Preferences->Security
然后将Security domain的选项设置为maximum。

12、内存和性能监视器
Edit->Preferences->Memory Monitor
Edit->Preferences->Profiler

13、出现安装后无法打开问题
有些Nokia手机会出现安装后无法打开,原因是安装包名称包含中文导致。

14、想要保存Sun Java (TM) Wireless Toolkit 2.5.2 for CLDC模拟器的RMS值,可以通过Preference - 存储(s)存储根目录  :(例:/disk)  来设置.

(选择你想要用的模拟器)然后到C:\Documents and Settings\Administrator\j2mewtk\2.5.2\appdb\DefaultColorPhone\filesystem\root1 建disk文件夹。
15、在S60 3th FP2版本上会出现String Index Out of Bounds Exception;原因DefaultLookAndFeel.java,在计算字符超过屏幕时出现异常。
int widest = f.charWidth('W');必须改成int widest = f.charWidth('一');

16、如果客户端创建出现cvs [server aborted]: "add" requires write access to the repository,将服务器端的CVSNT Advanced的All user are read即可.

17、NokiaS60手机出现string index异常的原因。

com.sun.lwuit.Font.charWidth(char)

1、TextArea  line:186

   private static char widestChar = '国';

2、HTMLTextArea  line:33

   private static char widestChar = '一';

3、DefaultLookAndFeel  line:1124

   int widest = f.charWidth('国');

分享到:
评论

相关推荐

    lwuit-incubator-专为blackberry移植的版本

    lwuit-incubator,含专为blackberry移植的版本,在\lwuit-incubator\trunk\awandi\bb中,里面有DOC和源码,不过它把4.2-4.7版本放在一起了,应用的时候需要根据自己项目实际进行裁剪和修改。

    lwuit-blackberry上移植的版本

    Lwuit在blackberry上的移植版本,使用subversion签下来的,我把这个从lwuit-incubator中提取出来的,里面有DOC和源码,不过它把4.2-4.7版本放在一起了,应用的时候需要根据自己项目实际进行裁剪和修改。

    Lwuit-九宫格源码

    【Lwuit-九宫格源码】是一个专注于Java ME(J2ME)平台的UI设计项目,利用 Lightweight User Interface Toolkit(LWUIT)库来创建一个九宫格的图形用户界面。LWUIT 是一个开源的轻量级UI框架,它提供了丰富的组件和...

    lwuit-1.4 源代码

    《深入解析LWUIT 1.4源代码:构建J2ME中的轻量级用户界面》 LWUIT( Lightweight User Interface Toolkit)是Java 2 Micro Edition (J2ME) 平台上的一种轻量级用户界面框架,它为开发者提供了一套类似于Swing的API...

    LWUIT1.2-src

    LWUIT( Lightweight UI Toolkit)是Sun Microsystems(后被Oracle收购)开发的一个开源用户界面库,主要用于J2ME(Java 2 Micro Edition)平台。它为移动设备提供了丰富的图形用户界面组件,使得开发者能够创建出...

    LWUIT1-2-1学习文档(中文版).pdf

    J2ME的LWUIT框架,很不错的一本书。

    最新LWUIT_1_5

    LWUIT( Lightweight UI Toolkit )是Java ME(J2ME)平台上的一种用户界面库,专为移动设备设计,提供了一种轻量级、高性能的界面构建工具。它旨在简化和美化在移动设备上的应用程序开发,使开发者能够创建具有丰富...

    LWUIT.jar LWUIT.jar

    LWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jarLWUIT.jar

    LWUIT 入门资料个人整理

    个人整理的LWUIT资料. 入门资料. 比较适合于新手学习LWUIT.基本概括了所有的资源

    Lwuit入门程序测试一下Demo

    1. **轻量级**:LWUIT设计时考虑了资源有限的移动设备,因此它的体积小,运行效率高。 2. **丰富的UI组件**:LWUIT提供了一系列预定义的UI组件,如按钮、文本框、列表、表单等,使开发者可以快速构建美观的界面。 3....

    J2me 轻量级UI控件-lwuit1.2.1

    **J2ME轻量级UI控件:LWUIT 1.2.1** Java Micro Edition(J2ME)是一种适用于小型设备和嵌入式系统的Java平台,它为开发移动应用提供了基础。在J2ME中,用户界面的构建通常是一项挑战,因为它需要在资源有限的设备...

    JAVA ME富客户端开发-LWUIT开发文档

    【JAVA ME富客户端开发-LWUIT开发文档】 LWUIT(Lightweight User Interface Toolkit)是针对JAVA ME平台设计的一个轻量级用户界面开发框架。它由SUN公司在2008年5月发布,旨在解决JAVA ME环境中界面设计的复杂性...

    LWUIT截止2012年1月3日官网最新代码、中英文开发文档合集

    "6-lwuit-324305-zhs.pdf"可能是一个中文版的LWUIT教程或者指南,对于中国开发者来说尤其有用,因为它提供了中文解释,便于理解和实践。中文文档通常会详细解释LWUIT的关键概念,如布局管理器、样式表的应用、图形...

    lwuit实例 lwuit j2me 界面

    LWUIT( Lightweight UI Toolkit)是Java ME平台上的一款开源用户界面框架,专为移动设备设计,用于构建具有丰富图形和互动性的应用程序。这个框架提供了一系列的组件和工具,使得开发者可以轻松创建出美观且功能...

    LWUIT最新源代码

    Sun发布了LWUIT(Light-Weight UI Toolkit)的源代码。项目主页访问:LWUIT。 The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, ...

    LWUIT

    LWUIT( Lightweight UI Toolkit)是Java ME(J2ME)平台上的一款强大的用户界面(UI)框架,专门针对移动设备的资源限制而设计。LWUIT 提供了丰富的组件和可定制的外观,使得开发者能够创建出具有吸引力、功能丰富...

    LWUIT_3_1英文原版.part1

    The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, 字体, 触摸屏, 动画效果, Rich控件, 3D集成, Painter, 模式对画框, I18N/L10N等...

    Lwuit一些简单测试小应用程序Demo

    这个"**Lwuit一些简单测试小应用程序Demo**"是基于LWUIT库编写的示例代码,用于展示LWUIT的功能和用法。 LWUIT的核心特点包括: 1. **跨平台兼容性**:LWUIT支持多种Java ME设备,包括不同的手机和平板电脑,使得...

    Lwuit精简解说下载

    LWUIT( Lightweight UI Toolkit)是Java ME平台上用于构建用户界面的一个开源库,它提供了丰富的UI组件和动画效果,使得开发者能够创建出具有吸引力且功能强大的移动应用。J2ME,全称Java 2 Micro Edition,是Java...

    lwuit 1.2.1lwuit 最新

    The Lightweight UI Toolkit (LWUIT) 是一个轻量级JavaME UI工具包。LWUIT类似Swing 的MVC架构, 支持多种布局(Layouts), 皮肤更换, 字体, 触摸屏, 动画效果, Rich控件, 3D集成, Painter, 模式对画框, I18N/L10N等...

Global site tag (gtag.js) - Google Analytics