自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaMe開(kāi)發(fā):繪制可自動(dòng)換行文本

開(kāi)發(fā) 后端
JavaMe Graphics類中的drawString不支持文本換行,這樣繪制比較長(zhǎng)的字符串時(shí),文本被繪制在同一行,超過(guò)屏幕部分的字符串被截?cái)嗔?。如何使繪制的文本能自動(dòng)換行呢?

【問(wèn)題描述】

JavaMe Graphics類中的drawString不支持文本換行,這樣繪制比較長(zhǎng)的字符串時(shí),文本被繪制在同一行,超過(guò)屏幕部分的字符串被截?cái)嗔?。如何使繪制的文本能自動(dòng)換行呢?

 

【分析】

drawString無(wú)法實(shí)現(xiàn)自動(dòng)換行,但可以實(shí)現(xiàn)文本繪制的定位。因此可考慮,將文本拆分為多個(gè)子串,再對(duì)子串進(jìn)行繪制。拆分的策略如下:

1 遇到換行符,進(jìn)行拆分;

2 當(dāng)字符串長(zhǎng)度大于設(shè)定的長(zhǎng)度(一般為屏幕的寬度),進(jìn)行拆分。

 

【步驟】

1 定義一個(gè)String和String []對(duì)象;

  1. private String info;  
  2. private String info_wrap[]; 

2 實(shí)現(xiàn)字符串自動(dòng)換行拆分函數(shù)

StringDealMethod.java

  1. package com.token.util;  
  2.  
  3. import java.util.Vector;  
  4.  
  5. import javax.microedition.lcdui.Font;  
  6.  
  7. public class StringDealMethod {  
  8.     public StringDealMethod()  
  9.     {  
  10.           
  11.     }  
  12.  
  13.     // 字符串切割,實(shí)現(xiàn)字符串自動(dòng)換行  
  14.     public static String[] format(String text, int maxWidth, Font ft) {  
  15.          String[] result = null;  
  16.          Vector tempR = new Vector();  
  17.          int lines = 0;  
  18.          int len = text.length();  
  19.          int index0 = 0;  
  20.          int index1 = 0;  
  21.          boolean wrap;  
  22.          while (true) {  
  23.           int widthes = 0;  
  24.           wrap = false;  
  25.           for (index0 = index1; index1 < len; index1++) {  
  26.            if (text.charAt(index1) == '\n') {  
  27.                 index1++;  
  28.                 wrap = true;  
  29.                 break;  
  30.                }  
  31.                widthes = ft.charWidth(text.charAt(index1)) + widthes;  
  32.  
  33.                if (widthes > maxWidth) {  
  34.                 break;  
  35.                }  
  36.               }  
  37.               lines++;  
  38.  
  39.               if (wrap) {  
  40.                tempR.addElement(text.substring(index0, index1 - 1));  
  41.               } else {  
  42.                tempR.addElement(text.substring(index0, index1));  
  43.               }  
  44.               if (index1 >= len) {  
  45.                break;  
  46.               }  
  47.              }  
  48.              result = new String[lines];  
  49.              tempR.copyInto(result);  
  50.              return result;  
  51.             }  
  52.       
  53.     public static String[] split(String original, String separator) {  
  54.         Vector nodes = new Vector();  
  55.         //System.out.println("split start...................");  
  56.         //Parse nodes into vector  
  57.         int index = original.indexOf(separator);  
  58.         while(index>=0) {  
  59.         nodes.addElement( original.substring(0, index) );  
  60.         original = original.substring(index+separator.length());  
  61.         index = original.indexOf(separator);  
  62.         }  
  63.         // Get the last node  
  64.         nodes.addElement( original );  
  65.  
  66.         // Create splitted string array  
  67.         String[] result = new String[ nodes.size() ];  
  68.         if( nodes.size()>0 ) {  
  69.         for(int loop=0; loop<nodes.size(); loop++)  
  70.         {  
  71.         result[loop] = (String)nodes.elementAt(loop);  
  72.         //System.out.println(result[loop]);  
  73.         }  
  74.  
  75.         }  
  76.  
  77.         return result;  
  78.         }  
  79. }  

3 調(diào)用拆分函數(shù),實(shí)現(xiàn)字符串的拆分

  1. int width = getWidth();  
  2.  
  3. Font ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);  
  4.           
  5. info = "歡迎使用!\n" 
  6.     +"1 MVC測(cè)試;\n" 
  7.     +"2 自動(dòng)換行測(cè)試,繪制可自動(dòng)識(shí)別換行的字符串。\n";  
  8. info_wrap = StringDealMethod.format(info, width-10, ft);  

4 繪制字符串

  1. graphics.setColor(Color.text);  
  2. graphics.setFont(ft);  
  3. for(int i=0; i<info_wrap.length; i++)  
  4. {  
  5.     graphics.drawString(info_wrap[i], 5, i * ft.getHeight()+40, Graphics.TOP|Graphics.LEFT);  

繪制的效果如圖1所示:


圖1 自動(dòng)換行字符串繪制效果

原文鏈接:http://blog.csdn.net/tandesir/article/details/7541403

【系列文章】

  1. JavaMe開(kāi)發(fā):低級(jí)界面繪圖之點(diǎn)陣字
  2. JavaMe開(kāi)發(fā):低級(jí)界面繪圖之菜單
  3. JavaMe開(kāi)發(fā):也說(shuō)MVC設(shè)計(jì)模式
  4. JavaMe開(kāi)發(fā):繪制可自動(dòng)換行文本
  5. JavaMe開(kāi)發(fā):繪制文本框TextEdit
  6. JavaM開(kāi)發(fā):自適應(yīng)滾動(dòng)顯示
責(zé)任編輯:林師授 來(lái)源: tandesir的博客
相關(guān)推薦

2012-05-09 10:35:36

JavaMEJava

2012-05-09 10:58:25

JavaMEJava

2012-05-09 10:09:18

JavaMEJava

2012-05-09 10:03:08

JavaMEJava

2012-05-09 09:49:54

JavaMeJava

2010-06-03 14:01:26

JavaSEJavaMEiPhone

2022-05-11 09:03:05

CSS容器文本換行

2025-04-22 09:26:00

2021-08-30 07:57:26

OpenAttack文本對(duì)抗攻擊

2018-03-27 13:33:48

百度

2020-12-31 05:37:05

HiveUDFSQL

2022-08-02 06:39:06

多行文本CSS

2010-09-13 16:04:27

CSS控制自動(dòng)換行

2013-11-13 00:20:01

微信微信公號(hào)微信公眾賬號(hào)

2023-06-11 17:00:06

2021-07-27 07:31:16

CSS 元素切換

2016-11-16 15:05:42

情感分析

2023-12-18 09:15:58

CSS前端容器查詢

2011-08-29 15:30:53

JavaMELua

2019-11-05 18:50:37

代碼開(kāi)發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)