使用verctor文本自动换行

原创 2006年06月08日 10:55:00
前几天要在一个东东上加上帮助,好长好长,没办法。想不出好办法用drawString()一行一行画出来,痛苦。去网上找下有没有好的办法,找到了一个用vector解决的办法。嘿嘿,拉过来学习下。
final int CharacterNumber = 6;
public Vector getSubsection(String str){
Vector vector = new Vector();
int i=0;
while(!str.equals(""){
if(str.length>6){
vector.addElement(str.substring(0,CharacterNumber));
str = str.substring(CharacterNumber);
}
else{
vector.addElement(str);
str = "";
}
}
return vector;
}
再把帮助信息改一改:
final String strGamehelp =
"在年份不详的一"+
"个时代中,妖"+
"与人类都存在"+
"于世界上,并"+
"基本为对立状"+
"态,但是不排"+
"除有相处一起"+
"的可能,因为"+
"人类基本已经"+
"接受世界上有"+
"妖的事实了。";
最后是画出来:
Vector vector = getSubsection(strGamehelp);
for(int i=0;i<vector.size();i++){
g.drawString((String)vector.elementAt(i),5,5+20*i,Graphics.TOP|Graphics.LEFT);
}
vector = null;
这下好了,随便加,怎么加我都不怕,嘿嘿,自动换行。
 
如果是英文的还有下面的程序,不过我好像用不上.
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;
}

再改一下调用的地方:
Font font = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN, Font.SIZE_SMALL);
g.setFont(font);
Vector vector = getSubsection(strGamehelp,font,getWidth()-10," ,.?!");
这样,对于英文我们也可以正确的自动断行显示了。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;
}

再改一下调用的地方:
Font font = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN, Font.SIZE_SMALL);
g.setFont(font);
Vector vector = getSubsection(strGamehelp,font,getWidth()-10," ,.?!");
这样,对于英文我们也可以正确的自动断行显示了。

刚从老大那里又要了一个,他使用的方法,和上面差不多。

原文:
/**
    * 文字分行段
    * @param strSource
    * @param width
    * @param strSplit
    * @return
    */
   public Vector getSubsection(String strSource, int width, String strSplit,Font mCurFont) {
      int i, j;
      int LastLength = 1;
      int step = 0;
      Vector mTmpVector = new Vector();
      String mTmpString = strSource;
      try {
         while (!mTmpString.equals("")) {
            i = mTmpString.indexOf("/n");
            if (i > 0) {
               if (mCurFont.stringWidth(mTmpString.substring(0, i - 1)) >= width) {
                  i = -1;
               }
            }
            if (i == -1) {
               if (LastLength > mTmpString.length()) {
                  i = mTmpString.length();
               } else {
                  i = LastLength;
                  step = mCurFont.stringWidth(mTmpString.substring(0, i)) > width ? -1
                        : 1;
                  if (i < mTmpString.length()) {
                     while (!(mCurFont.stringWidth(mTmpString.substring(0, i)) <= width && mCurFont
                           .stringWidth(mTmpString.substring(0, i + 1)) > width)) {
                        i = i + step;
                        if (i == mTmpString.length())
                           break;
                     }
                  }
               }
               if (!strSplit.equals("")) {
                  j = i;
                  if (i < mTmpString.length()) {
                     while (strSplit.indexOf(mTmpString.substring(i - 1, i)) == -1) {
                        i--;
                        if (i == 0) {
                           i = j;
                           break;
                        }
                     }
                  }
               }
            }
            LastLength = i;
            mTmpVector.addElement(mTmpString.substring(0, i));
            if (i == mTmpString.length()) {
               mTmpString = "";
            } else {
               mTmpString = mTmpString.substring(i);
               if (mTmpString.substring(0, 1).equals("/n")) {
                  mTmpString = mTmpString.substring(1);
               }
            }
         }
      } catch (Exception e) {
         System.out.println("getSubsection:" + e);
      }
      return mTmpVector;
   }

相关文章推荐

flex重载Button 文本自动换行

  • 2009年12月31日 15:19
  • 2KB
  • 下载

继承view 实现文本的自动换行

  • 2014年08月06日 10:56
  • 2.39MB
  • 下载

CSS控制文本自动换行

1.你定死表格的宽度,即给表格一个宽度值(是数值,不是百分比) 2.强制不换行 div{ //white-space:不换行;normal 默认;nowrap强制在同一行内显示所有文本,直到文...
  • smeyou
  • smeyou
  • 2012年03月01日 11:46
  • 486

易语言文本自动换行

  • 2014年04月28日 16:21
  • 3KB
  • 下载

easyui在jsp页面的td文本过长时无法自动换行的解决方法

在用easyui写后台程序的时候发现了td无法自动换行的问题,当一个td单元格里的文本过长的时候,单元格会一直拉伸,这样用户体验度会变得很差而且不美观。刚开始的代码和界面效果如下: 尝试着上网找...
  • Xanthin
  • Xanthin
  • 2015年12月18日 10:16
  • 2090

html5-canvas的绘制文本自动换行

本文介绍怎么解决canvas绘图过程中,drawText的换行问题,先看一个大家平时在canvas绘制文本都会遇到的问题...

微信小程序 view的文本不能自动换行问题

今天碰到了个问题,view并不能让文本自动换行  看看官方定义的view组件,原本的view定义的display为block。  之前忘了在哪里看到小程序布局的时候用flex,所以涉及到了css3...

【 D3.js 高级系列 — 1.1 】 封装文本自动换行

在【高级 - 第 1.0 章】中讲解了在 SVG 中如何配合使用 text 和 tspan 来实现换行的功能,本文对此功能进行一下封装,以后就可以直接用了。...
  • lzhlzz
  • lzhlzz
  • 2015年03月12日 10:19
  • 3544

div+css实现文本原格式显示与自动换行

html的标签用可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。 而为了限制文本显示的范围,一般使用div+css设定自动换行或缩略等样式。对于未...

textview中自动换行显示文本内容

在做项目中遇到textview显示文本内容,一行显示不下,但是textview并没有自动换行显示。如下图情形(此图是借用网上的) 根据网上的内容设置了android:ellipsize="none...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用verctor文本自动换行
举报原因:
原因补充:

(最多只允许输入30个字)