使用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;
   }

HTML有趣的文本不自动换行问题

今天同事做一个文本自动换行的效果。比如一个字符串"12345678901234567890",由于宽度只有50px,所以想到达到以下这样的效果 12345678901234567890 HTML代码如...
  • yzsind
  • yzsind
  • 2008年09月04日 18:12
  • 9375

自动换行的button

18  Star297  Fork 78 LyndonChin/AndroidFlowLayout  Code Issues 2 Pull...
  • qq906786621
  • qq906786621
  • 2016年02月19日 17:08
  • 832

div内文字超过宽度时自动换行

div 设置宽度后 style加上 word-break:break-all; 或者 word-wrap:break-word; 区别:(http://zhidao.baidu.com/link?...
  • eunyeon
  • eunyeon
  • 2016年10月14日 14:41
  • 7024

CSS3让文本自动换行——word-break属性

1.依靠浏览器让文本自动换行 浏览器本身都自带着让文本自动换行的功能。 2.指定自动换行的处理方法 在CSS3中,可以使用word-break属性来自己决定自动换行的处理方法。 div{     wo...
  • u013063153
  • u013063153
  • 2016年09月03日 17:11
  • 1656

c++中verctor函数的用法详解

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.      用法: ...
  • bmicnj
  • bmicnj
  • 2016年09月21日 18:03
  • 1184

Android自定义view-文本自动换行

转自:http://gundumw100.iteye.com/blog/1420725   感谢这位朋友   今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一...
  • jbfandroid123
  • jbfandroid123
  • 2013年08月27日 14:49
  • 1857

css 禁止文字自动换行

white-space:nowrap;
  • u011206991
  • u011206991
  • 2016年04月08日 16:16
  • 577

【HTML】让<pre>标签文本自动换行

利用这个标签可以将其包起来的文字排版、格式,原封不动的呈现出来。 也就是说你输入的东西被原封不动的输出,包括你输入的空格之类的,不用 和等来表示空格或者回车了。 但是,默认情况下, 标签中的内容...
  • oYunTaoLianWu
  • oYunTaoLianWu
  • 2013年09月06日 18:00
  • 5591

解决 水晶报表自动换行时文本被截问题

水晶报表在自动换行时,优先保留了单词的完整性(或者说优先以空格、符号位置换行),所以一般不会在单词中间断开的。但是有时却出现在换行处文本被截掉的情况,这种情况很巧合,因为它并不常见,不过确是被我遇到了...
  • luols
  • luols
  • 2011年01月14日 18:09
  • 3739

Flex中实现自动换行

在mxml 中使用“ \r\n ”实现换行。  在AS3需要用 "  "实现换行。
  • wanlixingzhe
  • wanlixingzhe
  • 2014年04月10日 16:24
  • 491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用verctor文本自动换行
举报原因:
原因补充:

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