如何在J2ME的低級介面中輕鬆實現各種文字的自然分行顯示

來源:互聯網
上載者:User
顯示 做遊戲的時候,特別是在一些對話比較多的情況下,如RPG遊戲,常常遇到文字的斷行顯示問題
如何做到不管如何變化文字,都能夠比較好地顯示呢,下面有一個函數可以對文字進行分行,然後就可以一行行地列印了

第四個參數主要是對像英語這樣多個字母組成一個單詞的語言而設定的,因為像英語你不能把一個單詞一分為二成兩行的,可以傳入一些分詞的標誌,如空格、標點符號什麼的,如“ ,.?!”
中文沒有關係
但是日文我也鬧不大清楚,不知道它是怎麼分詞的,是和中文一樣,還是和英文一樣

/**@todo 對一段文字進行分行,這種分行是針對於某個字型的
* @author efei
* @param strSource String 待分行的字串
* @param font Font 使用的字型
* @param width int 分行後需要滿足的寬度
* @param strSplit String 斷詞判斷字元,如空格和一些標點符號。中文不需要斷詞,則傳Null 字元串
* @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;





相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。