Програмування

Автор: Пользователь скрыл имя, 04 Апреля 2012 в 21:50, курсовая работа

Описание работы

реализация рисовки и переноса текста на Canvas в Java ME

Работа содержит 1 файл

Курсова.docx

— 23.98 Кб (Скачать)

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(LongString.substring(i0,i));

            if (jw+j<w)

            {//Слово умещается

                jw=jw+j;

                i0=i;

            } else

            {//Слово не умещается

                StringLines.addElement(LongString.substring(in,i0));

                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(LongString.substring(in,i));

                    }

                    i=i-1;

                    j=g.getFont().stringWidth(LongString.substring(in,i));

                    StringLines.addElement(LongString.substring(in,i));

                    jw=jw-j;

                    i0=i;

                    in=i;

                  }

                  jw=0;

                }else{i0=i;}

            }

        }

        StringLines.addElement(LongString.substring(in,imax));

        textheight=StringLines.size()*hStr;

    }

    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.elementAt(i).toString(), x+1, y+y1, g.LEFT|g.TOP);

           }

           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).setCurrent(MySrc);

    }

 

    public void pauseApp() {

    }

 

    public void destroyApp(boolean unconditional) {

    }

    }

 

 

 

import javax.microedition.lcdui.*;

import javax.microedition.lcdui.Graphics;

 

 

 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)

 

        {

            //При первом запуске программы  создаем объект MultiLineText

            //и задаем параметры текста.

            MLT = new MultiLineText();

            MLT.SetTextPar(1, 1, GrW-0,GrH-0,5,Font.SIZE_SMALL,Font.STYLE_BOLD,Font.FACE_PROPORTIONAL,g, " Довга строка тексту ");

            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         )

 

де 

  • х, у - координати верхнього лівого кута тексту, ширина і висота - ширина і висота прямокутної області, куди буде виводитися текст;
  • dy- крок у пікселях при прокручуванні рядків (фактично це швидкість прокрутки тексту);
  • FontSize – розмір шрифту ;
  • FontStyle – стиль шрифту;
  • FontType – тип шрифту;
  • graph – Graphics об’єкт;
  • LongString – рядок тексту.

 

Після того, як параметри  тексту задані, можна використовувати  метод DrawMultStr () для виводу тексту на екран.

 

Перенесення рядків

Власне перенесення рядків реалізований в методі SetTextPar. Переданий рядок LongString розбивається на масив рядків, який заноситься в Vector StringLines. Якщо слово повністю не поміщається в рядку, воно розбивається на декілька рядків. Таким чином, текст розбивається на рядки на етапі завдання параметрів, а при виклику методу DrawMultStr відбувається відображення вже розбитого на рядки тексту.

 

 

 

 

 

Міністерство освіти і  науки молоді та спорту України

Національний авіаційний університет

Інститут аерокосмічних  систем управління

 

 

 

 

Курсова робота

на тему: «Text Reader»

 

 

 

 

 

Виконали

студент  гр. ІАСУ-203

Железняк О. М.

Кудляк О. О.

Перевірила:

Галагуз Т. А.

 

 

 

 

 

Київ-2011


Информация о работе Програмування