如何在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("\n");
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(i<temp.length()){
while (! (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("\n")) {
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;i<vector.size();i++){
g.drawString((String)vector.elementAt(i),0,gintLineHeight*i,0);
if((i-mintBeginIndex+1)*gintLineHeight>getHeight())break;
}
vector = null;

时间: 2025-01-21 01:34:31

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

J2ME中用低级界面实现简单的数字输入

最近在写一个j2me程序 其中包括一个数字输入的textfield 在手机上面实现的时候(s40模拟器)数字的输入很烦琐,所以想避开这种问题 于是改用低级界面实现: private StringBuffer sb=new StringBuffer(); //定义一个StringBuffer用来保存输入的数字 private int len=4; //想输入的数字的长度 private int temp; //取数字 protected void paint(Graphics g) { g.set

如何在C# 窗体程序界面中显示编辑Excel文件

问题描述 想在C#中实现如下功能,不知道该怎么做1.可以将Excel模板显示在窗体界面上,显示方式与在Excel中样式一致,提供对Excel中的编辑.保存功能2.可以在指定的模板cell(如C3)中,通过代码插入数据库中查询到的内容希望大家不吝赐教,提供下demo或想法,谢谢! 解决方案 解决方案二: 解决方案三:引用1楼shingoscar的回复:dsoframer.ocx有个bug,在打开excel文件,编辑,保存,关闭后,在windows里打开刚刚编辑的excel文件,会出现闪退现象,请问

在单聊的聊天界面中只有第一条消息能收到并显示,第二条有震动的消息提示,但是看不见

问题描述 解决方案 1.监听下didreceivemessage回调接口,看你第二条消息是否真的收到了 2.如果收到了,应该就是UI上的显示问题了,对照demo检查下代码

android-安卓工程中如何实现edittext中输入一段文字 在textview中弹出另一段文字(不同文字)

问题描述 安卓工程中如何实现edittext中输入一段文字 在textview中弹出另一段文字(不同文字) 各位大神 恕我还是安卓新手中的新手 可能这个问题对你们来说太浅显了 我想 如果是用if语句 要怎么写代码呢 还是只用监听就好? 解决方案 et.addTextChangedListener(new TextWatcher(){ @Override public void beforeTextChanged(CharSequence s, int start, int count, int

css中fieldset legend中间的文字怎么会默认显示蓝色

问题描述 css中fieldsetlegend中间的文字怎么会默认显示蓝色 解决方案 解决方案二:在fieldset外面放一个容器改变颜色试试,然后在fieldset内部放一个容器,再把颜色改回来,试试解决方案三:除非你定义了,否则是不会显示蓝色的解决方案四:样式分为默认样式,自定义样式,继承样式你这种情况就是浏览器的默认样式.这个行为就像为什么一个超链接在IE下有下划线和蓝色一样.因为w3c标准只是定义a元素的行为(点击可以进行另一个页面),但是标准并没有规定a元素在浏览器中一定要显示成斜体一

我想咨询下如何在UI层界面中调用DAL中的方法

问题描述 我想咨询下如何在UI层界面中调用DAL中的方法,学习3层我想在原开始层ui层调用DAL层中的方法,知道这样做不合理但是不会调用把DAL可以NEW出来但是在使用方法的时候不能使用不知道是什么问题·. 解决方案 解决方案二:不能使用,是神马意思?解决方案三:如果你需要跨层调方法,那你应该定义成静态的..然后添加引用添加using什么的都要加才行..不过不推荐你这样..这样等于你第一层直接和第3层发生关系了解决方案四:那三层架构是必须要层层递进吗,有没有关于三层架构的资料推荐的书籍解决方案五

ios-如何在所有使用了自定义UINavigationBar的界面中使用自定义的UIBarButtonItem

问题描述 如何在所有使用了自定义UINavigationBar的界面中使用自定义的UIBarButtonItem 不是每个界面都写一遍 UIImage image = [UIImage imageNamed:imagePath]; UIButton button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.heigh

在J2ME手机程序开发中使用颜色

程序 在J2ME手机开发过程中,需要经常用到颜色来进行绘制,增强程序的表现效果,下面就介绍一下如何使用颜色.       由于J2ME技术比较简单,所以没有实现专门的颜色类,而只是使用RGB的概念来代表颜色.这里简单介绍一下RGB的概念,颜色是由红(Red).绿(Green).蓝(Blue)三原色组成的,所以可以使用这三个颜色的组合来代表一种具体的颜色,其中R.G.B的每个数值都位于0-255之间.在表达颜色的时候,即可以使用三个数字来表达,也可以使用一个格式如0X00RRGGBB这样格式的十六

VB中轻松打造绚丽按钮

简介:一个非常Cool的皮肤控件,可以将你窗体中的CommandButton的样式改变为XP.Java等等.推荐下载. 使用示例 想让你的程序更加吸引眼球吗?想在你的程序中打造类似Windows XP.Java.Flat风格的按钮吗?只要在你的程序中加上BSE控件,简简单单的一行代码,就可以轻松实现多达16种风格的按钮,完全使你抛弃了繁杂的代码!下面我们就结合一个实例来说明使用方法,并展示该控件实现的强大功能! BSE控件一个可以实现15种不同的风格,通过设置控件的SchemeStyle属性,我