/* * Класс MultiLineText предназначен для отображения многострочного текста. * Автор А.С. Ледков * www.mobilab.ru * ledkov@inbox.ru */ import java.util.Vector; import javax.microedition.lcdui.*; public class MultiLineText { private int x,y,w,h,fsz,fst,fty; //Размер ограничивающего прямоугольника; private int hStr; //Высота строки private int y0; //Положение верхнего края текста private int dy; //Шаг при прокрутке текста private int textheight; //Общая высота текста private Vector StringLines; private Graphics g; private int gx,gy,gw,gh; //Исходная область private String str1; public void MoveDown() { if (textheight>h) { y0=y0-dy; if (h-y0>textheight) {y0=h-textheight;} } } public void MoveUp() { if (textheight>h) { y0=y0+dy; if (y0>0){y0=0;} } } public void PageUp() { if (textheight>h) { y0=y0+h; if (y0>0){y0=0;} } } public void PageDown() { if (textheight>h) { y0=y0-h; if (h-y0>textheight) {y0=h-textheight;} } } public void SetTextPar( int x, int y, int width, int height, int dy, int FontSize, int FontStyle, int FontType, Graphics graph, String LongString ) { this.x=x; this.y=y; this.w=width; this.h=height; this.dy=dy; this.fsz=FontSize; this.fst=FontStyle; this.fty=FontType; this.g=graph; gx=g.getClipX(); gy=g.getClipY(); gw=g.getClipWidth(); gh=g.getClipHeight(); g.setFont(Font.getFont(fty, fst, fsz)); //Разбиваем строку на массив строк StringLines=null; StringLines =new Vector(1); int i0=0,i=0,in=0,j,jw=0; //Сещение от начала строки int imax=LongString.length(); //Длина строки hStr=g.getFont().getHeight(); boolean isexit=true; y0=0; while (isexit) { i=LongString.indexOf(" ", i0+1); if (i<=i0) { i=imax; isexit=false; } j=g.getFont().stringWidth(LongString.substring(i0,i)); if (jw+jw) {//Слово полностью не умещается в строке i=i0; while (jw>w) { j=0; while (j0){ g.drawString(StringLines.elementAt(i).toString(), x+1, y+y1, g.LEFT|g.TOP); } y1=y1+hStr; if (y1>h){break;} } g.setClip(gx, gy, gw, gh); } }