Автор: Пользователь скрыл имя, 04 Апреля 2012 в 21:50, курсовая работа
реализация рисовки и переноса текста на Canvas в Java ME
import java.util.Vector;
import javax.microedition.lcdui.*;
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(
if (jw+j<w)
{//Слово умещается
jw=jw+j;
i0=i;
} else
{//Слово не умещается
StringLines.addElement(
in=i0+1;
jw=j;
if (j>w)
{//Слово полностью не умещается в строке
i=i0;
while (jw>w)
{
j=0;
while (j<w)
{
i=i+1;
j=g.getFont().stringWidth(
}
i=i-1;
j=g.getFont().stringWidth(
StringLines.addElement(
jw=jw-j;
i0=i;
in=i;
}
jw=0;
}else{i0=i;}
}
}
StringLines.addElement(
textheight=StringLines.size()*
}
public void DrawMultStr()
{
int y1;
g.setClip(x, y, w, h);
y1=y0;
g.setFont(Font.getFont(fty, fst, fsz));
for (int i=0;i<StringLines.size();i++)
{
if ((y1+hStr)>0){
g.drawString(StringLines.
}
y1=y1+hStr;
if (y1>h){break;}
}
g.setClip(gx, gy, gw, gh);
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MultiLineText1 extends MIDlet {
private Display mydisplay;
public MultiLineText1() {
this.mydisplay = Display.getDisplay(this);
}
public void startApp() {
TextReader MySrc = new TextReader();
// добавляем команду выхода
Display.getDisplay(this).
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.
class TextReader extends Canvas{
private boolean isFirstRun=true; //Флаг первого запуска.
private MultiLineText MLT;
public void paint(Graphics g)
{
int GrH=getHeight();
int GrW=getWidth();
if (isFirstRun==true)
{
//При первом запуске
//и задаем параметры текста.
MLT = new MultiLineText();
MLT.SetTextPar(1, 1, GrW-0,GrH-0,5,Font.SIZE_SMALL,
isFirstRun=false;
}
g.setColor(0,0,0);
g.fillRect(0,0,GrW,GrH);
g.setColor(0,0,0);
g.drawRect(0, 0, GrW-0,GrH-0);
g.setColor(0xff0000);
MLT.DrawMultStr(); //Выводим текст на экран.
}
protected void keyPressed( int keyCode ){
//Організація прокрутки текста
if (keyCode == getKeyCode(UP))
{
MLT.MoveUp();
}else if (keyCode == getKeyCode(DOWN))
{
MLT.MoveDown();
}else if (keyCode == getKeyCode(LEFT))
{
MLT.PageUp();
}else if (keyCode == getKeyCode(RIGHT))
{
MLT.PageDown();
}
repaint();
}
}
Клас Canvas
Canvas є базовим класом для написання програм, які потрібно обробляти низькорівневі події та видавати графіки дзвінків для малювання на екрані. З точки зору розробки додатків, клас Canvas є класом взаємозамінних стандартних класів екрана, тому додаток може змішувати і поєднувати Canvas з високопоставленими екранами в міру необхідності. Наприклад, List може бути використаний для вибору доріжки для гоночної ігри, і підклас Canvas здійснюватиме фактичну гру.
Canvas забезпечує розробника методи для обробки ігрових дій, ключові події і покажчики подій (якщо підтримується пристроєм). Методи надаються також для визначення можливостей пристрою і відображення ключів до дій гри. Ключові події, як повідомляється щодо ключових кодів, які безпосередньо пов'язані з конкретними клавіші на пристрої, використання яких може перешкоджати мобільності. Портативні програми повинні використовувати ігрові дії, а не коди клавіш.
Відображення тексту на Canvas
При розробці графічних програм часто виникає необхідність вивести якийсь текст на екран. Якщо повідомлення невелике,то з цим завданням чудово справляється метод DrawString. Проблеми виникають при виведенні довгого тексту. Клас Graphics не містить вбудованого методу для відображення багаторядкового тексту, тому перенесення рядків у j2meдоводиться реалізовувати вручну. Хочу запропонувати Вашій увазі невеликий клас, який я використовую для відображення багаторядкових додатків.
Клас MultiLineText включає в себе шість методів
void SetTextPar(…) - використовується для завдання параметрів відображуваного тексту;
void DrawMultStr() - вивести текст на екран;
void MoveDown(), void MoveUp() – порядкова прокрутка тексту;
void PageDown(), void PageUp() – посторінкова прокрутка тексту.
Методу SetTextPar необхідно передати шість параметрів:
public void SetTextPar( int x, int y, int width, int height, int dy, int FontSize,
int FontStyle, int FontType, Graphics graph, String LongString )
де
Після того, як параметри тексту задані, можна використовувати метод DrawMultStr () для виводу тексту на екран.
Перенесення рядків
Власне перенесення рядків реалізований в методі SetTextPar. Переданий рядок LongString розбивається на масив рядків, який заноситься в Vector StringLines. Якщо слово повністю не поміщається в рядку, воно розбивається на декілька рядків. Таким чином, текст розбивається на рядки на етапі завдання параметрів, а при виклику методу DrawMultStr відбувається відображення вже розбитого на рядки тексту.
Міністерство освіти і науки молоді та спорту України
Національний авіаційний університет
Інститут аерокосмічних систем управління
Курсова робота
на тему: «Text Reader»
Виконали
студент гр. ІАСУ-203
Железняк О. М.
Кудляк О. О.
Перевірила:
Галагуз Т. А.
Київ-2011