JavaMe开发绘制可自动换行文本_java

【问题描述】

JavaMe Graphics类中的drawString不支持文本换行,这样绘制比较长的字符串时,文本被绘制在同一行,超过屏幕部分的字符串被截断了。如何使绘制的文本能自动换行呢?

【分析】

drawString无法实现自动换行,但可以实现文本绘制的定位。因此可考虑,将文本拆分为多个子串,再对子串进行绘制。拆分的策略如下:

1 遇到换行符,进行拆分;

2 当字符串长度大于设定的长度(一般为屏幕的宽度),进行拆分。

【步骤】

1 定义一个String和String []对象;

private String info;
private String info_wrap[]; 

2 实现字符串自动换行拆分函数

StringDealMethod.java

package com.token.util; 

import java.util.Vector; 

import javax.microedition.lcdui.Font; 

public class StringDealMethod {
  public StringDealMethod()
  { 

  } 

  // 字符串切割,实现字符串自动换行
  public static String[] format(String text, int maxWidth, Font ft) {
     String[] result = null;
     Vector tempR = new Vector();
     int lines = 0;
     int len = text.length();
     int index0 = 0;
     int index1 = 0;
     boolean wrap;
     while (true) {
     int widthes = 0;
     wrap = false;
     for (index0 = index1; index1 < len; index1++) {
      if (text.charAt(index1) == '\n') {
        index1++;
        wrap = true;
        break;
        }
        widthes = ft.charWidth(text.charAt(index1)) + widthes; 

        if (widthes > maxWidth) {
        break;
        }
       }
       lines++; 

       if (wrap) {
        tempR.addElement(text.substring(index0, index1 - 1));
       } else {
        tempR.addElement(text.substring(index0, index1));
       }
       if (index1 >= len) {
        break;
       }
       }
       result = new String[lines];
       tempR.copyInto(result);
       return result;
      } 

  public static String[] split(String original, String separator) {
    Vector nodes = new Vector();
    //System.out.println("split start...................");
    //Parse nodes into vector
    int index = original.indexOf(separator);
    while(index>=0) {
    nodes.addElement( original.substring(0, index) );
    original = original.substring(index+separator.length());
    index = original.indexOf(separator);
    }
    // Get the last node
    nodes.addElement( original ); 

    // Create splitted string array
    String[] result = new String[ nodes.size() ];
    if( nodes.size()>0 ) {
    for(int loop=0; loop<nodes.size(); loop++)
    {
    result[loop] = (String)nodes.elementAt(loop);
    //System.out.println(result[loop]);
    } 

    } 

    return result;
    }
}

3 调用拆分函数,实现字符串的拆分

int width = getWidth(); 

Font ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE); 

info = "欢迎使用!\n"
  +"1 MVC测试;\n"
  +"2 自动换行测试,绘制可自动识别换行的字符串。\n";
info_wrap = StringDealMethod.format(info, width-10, ft);

4 绘制字符串

int width = getWidth(); 

Font ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE); 

info = "欢迎使用!\n"
  +"1 MVC测试;\n"
  +"2 自动换行测试,绘制可自动识别换行的字符串。\n";
info_wrap = StringDealMethod.format(info, width-10, ft);

绘制的效果如图1所示:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索JavaMe开发
canvas 绘制文本 换行、canvas 绘制文字换行、css 文本自动换行、css文本换行、html 文本换行,以便于您获取更多的相关知识。

时间: 2024-08-01 11:25:01

JavaMe开发绘制可自动换行文本_java的相关文章

JavaMe开发绘制文本框TextEdit_java

[问题描述] TextEdit是采用GameCanvas绘制的文本编辑器.本文结合实例给出实现的方法. [原理] 1 运用Graphics.GameCanvas绘制文本框和光标. 2 检测到输入事件时,跳转到 高级界面->TextBox .通过系统调用输入法完成输入. 3 将TextBox输入的值返回给TextEdit对象. [设计模式] 这个过程有点类似装饰模式,实际上,实现输入的还是TextBox,只是给TextBox装饰了一下,形成了一个漂亮的外观. [代码清单] TextEdit.jav

JavaMe开发自适应滚动显示_java

[问题描述] 我们常看到一些滚动显示的实例,比如UC浏览器中,显示网页的内容.当内容比较多时,采用滚动分页显示是合理的.在Canvas中绘图中,多余的内容被截断了.如何实现滚动分页显示呢? [原理] JavaMe中有一个坐标变换的功能.当触发相应的按键事件时,我们就让其显示相应的页,并且使滚动条滚动到相应的位置. [代码清单] ShowHelp.java package com.token.view; import javax.microedition.lcdui.Font; import ja

安卓 app 形状 绘制-请教,安卓app开发中,能用代码绘制一个纯文本意义的纯色的胶囊形状吗

问题描述 请教,安卓app开发中,能用代码绘制一个纯文本意义的纯色的胶囊形状吗 请教,安卓app开发中,能用代码绘制一个纯文本意义的纯色的胶囊形状吗,还是要用png图片代替呢,各有什么有缺点呢 解决方案 可以直接画,定义圆角的弧度,其他用纯色填充,形如: radius就是角度 字面意思比较清楚,你看看 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://s

js+html5实现canvas绘制镂空字体文本的方法

  本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3

js+html5实现canvas绘制镂空字体文本的方法_javascript技巧

本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> Your browser does not s

Android 开发 绘制圆角距形背景实现程序

需要圆角距形的背景,可是直接用一终圆角的图片,但是因为Android屏幕分辨率太乱,为了能适应所有的分辨率,我们不可能事确定好宽度,虽然可以用draw9patch,但我一直没掌握那工具的用法,做出来的图片最终还是变形,但用下面的方法就永远不会变形,因为没有用图片,是用Android直接绘图. 最终的效果图:开发 绘制圆角距形背景实现程序-android绘制圆角矩形"> 新建一个drawable的xml文件,这里名为server_setting_bg:  代码如下 复制代码 <?xml

项目开发:绘制线框流程图

对于任何一个开发项目来说最大的错误可能就是没有计划.最近,有些人认为开始前无需计划,一个优秀的开发者需要的是随机应变.我敢肯定这样的做法最后注定是要失败的. 线框图是计划中的第一步也是最重要的一步.这是将创意转换成客户使用的程序的第一步.本文将要带你了解线框图整个的流程:包括涉及参与人员,工具等,以便您能够更好的制作计划. 1)了解自己的目标作为一个开发人员我想大家都有马上坐下来开始编码的冲动.通常最初的想法都很简单,那么你真的可以坐下直接开始吗?答案是否定的,项目很少有那么简单的,任何有经验的

详解Android开发中Fragment的使用_java

前言学习Java和Android将近一年的时间了,期间的成果应该就是独立完成了一个Android客户端,并且保证了其在主线版本的稳定性.期间遇到了很多坑,也跟着师兄学到了很多Android知识.但是人总是要拥抱变化,不能让自己太安逸,虽然有不舍,但是我已经证明了自己的学习能力,下一步就是开始做Rom Porting了.这里总结一下之前项目中用到最多的Fragment. Fragment简介Fragment可以理解成Activity中用户界面的一个行为或者一部分,它必须被嵌套在Activity中.

asp.net微信开发(高级群发文本)_实用技巧

首先我们先来讲解一下群发文本信息的过程,我个人开发程序是首先要有UI才能下手去写代码,界面如下,   看图我们也可以看出首先我们要获取该微信号本月还能群发几条信息,关于怎么计算,就是群发成功一条信息,就在本地数据库存储一条信息,用来计算条数,(这个我相信都会),大于4条就不能发送(这里我已经限制死了,因为服务号每月只能发送4条,多发送也没用,用户只能收到4条,除非使用预览功能,挨个发送,但预览功能也只能发送100次,或许可能使用开发者模式下群发信息可以多发送N次哦,因为我群发了两次之后,再进入到