如何在J2ME的低级界面中轻松实现各种文字的自然分行显示(转)

做游戏的时候,特别是在一些对话比较多的情况下,如RPG游戏,常常遇到文字的断行显示问题
如何做到不管如何变化文字,都能够比较好地显示呢,下面有一个函数可以对文字进行分行,然后就可以一行行地打印了

第四个参数主要是对像英语这样多个字母组成一个单词的语言而设置的,因为像英语你不能把一个单词一分为二成两行的,可以传入一些分词的标志,如空格、标点符号什么的,如“ ,.?!”
中文没有关系
但是日文我也闹不大清楚,不知道它是怎么分词的,是和中文一样,还是和英文一样

/**@todo 对一段文字进行分行,这种分行是针对于某个字体的
* @author efei
* @param strSource String 待分行的字符串
* @param font Font 使用的字体
* @param width int 分行后需要满足的宽度
* @param strSplit String 断词判断字符,如空格和一些标点符号。中文不需要断词,则传空字符串
* @return Vector
*/
public Vector getSubsection(String strSource,Font font
,int width,String strSplit){
Vector vector = new Vector();
String temp=strSource;
int i,j;
int LastLength = 1;
int step = 0;
try{
while (!temp.equals("")) {
i=temp.indexOf(" ");
if(i>0){
if(font.stringWidth(temp.substring(0,i-1)) >= width){
i = -1;
}
}
if(i==-1){
if(LastLength>temp.length()){
i = temp.length();
}else{
i = LastLength;
step = font.stringWidth(temp.substring(0, i)) > width ? -1 : 1;
//得到临界点
if(iwhile (! (font.stringWidth(temp.substring(0, i)) <= width
&& font.stringWidth(temp.substring(0, i + 1)) > width)) {
i = i + step;
if (i == temp.length())
break;
}
}
}
//断词,如果需要的话
if(!strSplit.equals("")){
j = i; //把初始值记录下来,是因为有可能出现一种情况,这种情况就是这一行只有这么一个单词,会一直搜索到头
if (i < temp.length()) {
while (strSplit.indexOf(temp.substring(i-1,i))==-1) {
i--;
if (i == 0) {
i = j; //恢复
break;
}
}
}
}
}
LastLength = i;
vector.addElement(temp.substring(0, i));
if (i == temp.length()) {
temp = "";
}
else{
temp = temp.substring(i);
if (temp.substring(0, 1).equals(" ")) {
temp = temp.substring(1);
}
}
}
}catch(Exception e)
{
System.out.println("getSubsection:"+e);
}
return vector;
}


使用示例:
int gintLineHeight = 15;//全局变量,行高
int gintBeginIndex = 0;//全局变量,在keyPressed里改变它的值,便可以实现上下翻页

String str = "方便起见,可以定义一个行高作为全局变量,这样比较好,写个简单的例子:"
Vector vector = getSubsection(str,Font.getDefaultFont(),getWidth(),"");

for(int i=gintBeginIndex;ig.drawString((String)vector.elementAt(i),0,gintLineHeight*i,0);
if((i-mintBeginIndex+1)*gintLineHeight>getHeight())break;
}
vector = null;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-127063/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-127063/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值