Prog_2_2 позволяет вывести форму, задав ее размеры и заголовок. Форма находится в левом верхнем углу.

 

Основная форма приложения в java2me для мобильных устройств

 

Некоторые иермины:

конфигурации java:

CDC- connected device configuration – постоянно подключаемые устройства (планшеты)

CLDC- connected limited device configuration – вкл/выкл устройства (телефоны)

профили java зависимость от аппаратной части

для телефонов – midp (mobile information device profile)

Для мобильных устройств программа (приложение) называется мидлет (midlet)

 

 

 

 

 

 

 

 

 

 

 

 

 

Запуск netbeans – создать проект java me мобильное приложение

создать мидлет hello – убрать галочку!

Устройство defaultCldcPhone1 – эмулятор телефона

 

Создать файл мидлет Prog_2_1

Создана оболочка midlet:

 

 

import javax.microedition.midlet.*;

 

public class Prog_2_1 extends MIDlet

{

public void startApp()

{

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

}

 

Любой мидлет имеет 3 функции: void startApp() – вызывается при запуске приложения,

void pauseApp() – вызывается, если переход в режим ожидания, destroyApp() – вызывается при завершении работы.

 

Пример мидлета – создание формы.

 

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class Prog_2_1 extends MIDlet

{

private Form form;

public Prog_2_1()

{

form = new Form( "Лабораторная 2" );

}

public void startApp()

{

Display.getDisplay( this ).setCurrent(form);

}

public void pauseApp()

{

}

public void destroyApp( boolean unconditional)

{

}

}

 

Ввод в редакторе NetBeans

 

 

 

 

После запуска (F6) вызывается эмулятор телефона и появляется:

 

 

 

Для запуска на реальном телефоне следует в проекте найти файл .jar

 

Prog_2_1.java - исходный текст

Prog_2_1.class – скомпилированная программа (байт коды)

В каталоге \dist находятся MobileApplication1.jar и MobileApplication1.jad

 

MobileApplication1.jar – файл с байт кодами, заархивированный внутренним архиватором java (типа zip) . Файл пересылается в телефон и запускается установленной java

 

MobileApplication1.jad – текстовый файл с описанием приложения.

 

Ограничения Form мидлета.

 

Форма занимает весь экран, заголовок задан сразу в конструкторе. В форму можно поместить лишь некоторые элементы:

 

 

Кроме Form, Canvas, Screen ,List и т.д.

Размещать элементы позволяет только Form, элементы столбиком и жестко закреплены.

Нет таблицы (типа StringGrid) даже нет Button!

 

Пакет LWUIT – аналог компонент swing

Подключение lwuit.jar к проекту.

 

Ресурсы – добавить jar/zip указать на lwuit.jar

и на файлы: lwuit_midp.jar, midp_io.jar

 

 

Prog_2_2.java

 

import javax.microedition.midlet.*;

import com.sun.lwuit.*;

import com.sun.lwuit.events.*;

 

public class Prog2_2 extends MIDlet

{

Form form;

public void startApp()

{

Display.init(this);

form = new Form();

form.setTitle("Лабораторная 2");

form.show();

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

}

 

Результат выполнения

 

 

Форма занимает весь экран. Для запуска на реальном телефоне файл MobileApplication2.jar скопировать в телефон и запустить.

 

 

2) Использование элементов типа Label (вывод строки) , Edit (редактирование одной строки) и button (кнопка)

 

 

Пример программы вычисления с использованием интерфейса.

конвертор суммы в долларах в сумму в рублях

 

На C++ Builder используем данные:

курс доллара – вещественное число вводится в Edit1

сумма в долларах – целое число вводится в Edit2

При нажатии Button1 вычисляется сумма в рублях и выводится в Label1

 

Форма приложения на C++ Builder

 

Добавим в форму Label, 2 поля Edit и кнопку button

 

 

 

 

Программа на C++ Builder

 

unit1.h

 

class TForm1 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TEdit *Edit2;

TButton *Button1;

void __fastcall FormCreate(TObject *Sender);

private: // User declarations

public: // User declarations

double Kurs; // курс доллара

int Bucks; // количество долларов

double Rubles; // количество рублей

__fastcall TForm1(TComponent* Owner);

};

 

 

Положение и размеры компонент зададим в событии OnCreate

 

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Form1->Top=0;

Form1->Left=0;

// Задание размеров и заголовка окна

Form1->Width=500;

Form1->Height=300;

Form1->Caption=”Лабораторная 2";

// задание параметров Label

Label1->Left=20;

Label1->Top=10;

Label1->Width=400;

Label1->Height=40;

Label1->Caption="Введите курс и количество долларов";

// первое поле для ввода курса

Edit1->Left=20;

Edit1->Top=80;

Edit1->Width=100;

Edit1->Height=20;

Edit1->Text="";

// второе поле для ввода количества долларов

Edit2->Left=180;

Edit2->Top=80;

Edit2->Width=100;

Edit2->Height=20;

Edit2->Text="";

// параметры кнопки button

Button1->Left=20;

Button1->Top=130;

Button1->Width=140;

Button1->Height=20;

Button1->Caption="Вычислить";

}

 

Установка отклика на нажатие кнопки

 

 

Вызывается функция вычисления

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Calculate();

}

 

Добавление в unit1.h

 

 

class TForm1 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TEdit *Edit2;

TButton *Button1;

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

public: // User declarations

double Kurs; // курс доллара

int Bucks; // количество долларов

double Rubles; // количество рублей

void Calculate();

__fastcall TForm1(TComponent* Owner);

};

 

7Добавление функции Calculate()

 

 

void TForm1::Calculate()

{

String s1;

int k;

Kurs=StrToFloat(Edit1->Text);

Bucks=StrToInt(Edit2->Text);

Rubles=Kurs*Bucks;

k=floor(Rubles*100); // округление

Rubles=k/100.0; // до копеек

s1=FloatToStr(Rubles);

s1="Ответ: "+s1;

Label1->Caption=s1;

}

Запуск:

 

 

После ввода и нажатия кнопки:

 

 

 

Аналогичное приложение на java 2 SE

 

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.lang.Math.*;

import javax.swing.*;

public class Prog_2_3

{

int Bucks;

double Kurs;

double Rubles;

JFrame form;

JLabel lb;

JTextField tf1;

JTextField tf2;

JButton bt;

Prog_2_3 ()

{

// установкаразмеров и заголовкаокна

form = new JFrame();

form.setSize (500,300);

form.setTitle ("лабораторная 2");

form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

form.setLayout(null); // неиспользоватьменеджерразмещений

// заданиепараметров Label

lb = new JLabel();

lb.setBounds(20,10,400,40); // left,top,width,height

lb.setText("Введите значения курса и долларов");

form.add(lb); // добавка в форму Label lb

// заданиепараметровпервоготекстовогополя

tf1 = new JTextField();

tf1.setBounds(20,80,100,20);

tf1.setText("");

form.add(tf1); // добавка в формутекстовогополя tf1

// заданиепараметроввтороготекстовогополя

tf2= new JTextField();

tf2.setBounds(180,80,100,20);

tf2.setText("");

form.add(tf2); // добавка в формутекстовогополя tf2

// заданиепараметровкнопки

bt=new JButton();

bt.setBounds(20,130,140,20);

bt.setLabel("Вычислить");

form.add(bt);

// добавлениеоткликанасобытие click

bt.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

// принажатиикнопкиbtпереход в даннуюточку

Calculate();

}

});

// заданиеформывидимой

form.show();

}

public void Calculate()

{

String s1;

int k;

s1=tf1.getText();

Kurs = Double.parseDouble(s1);

s1=tf2.getText();

Bucks=Integer.parseInt(s1);

Rubles=Kurs*Bucks;

k=(int)Math.round(Rubles*100); // округление

Rubles=k/100.0; // докопеек

s1=Double.toString(Rubles); // переводвещественного в строку

s1="Ответ: "+s1;

lb.setText(s1);

}

public static void main (String args[])

{

Prog_2_3 f;

f= new Prog_2_3();

}

}

 

 

Запуск из eclipse

 

 

После ввода и нажатия кнопки:

 

 

 

В вещественном числе точка!!!

 

Запускается также compile.bat, run.bat

 

Для мобильных приложений приложение имеет вид:

 

import javax.microedition.midlet.*;

import com.sun.lwuit.*;

import com.sun.lwuit.events.*;

import com.sun.lwuit.geom.*;

import com.sun.lwuit.layouts.*;

import java.lang.Math.*;

public class Prog2_3 extends MIDlet

{

Form form;

Label lb;

TextField tf1;

TextField tf2;

Button bt;

int Bucks;

double Kurs;

double Rubles;

public void startApp()

{

int w,h;

Dimension d=new Dimension(200,200);

Display.init(this);

form = new Form();

form.setPreferredSize(d);

form.setTitle("лабораторная 2");

w=form.getWidth();

h=form.getHeight();

CoordinateLayout e = new CoordinateLayout(w,h);

form.setLayout(e);

lb=new Label();

lb.setX(20);

lb.setY(30);

lb.setText("Введите курс и количество долларов");

form.addComponent(lb);

tf1 = new TextField();

tf1.setX(20);

tf1.setY(60);

tf1.setText("");

form.addComponent(tf1);

tf2= new TextField();

tf2.setX(20);

tf2.setY(90);

tf2.setText("");

form.addComponent(tf2);

bt=new Button();

bt.setX(20);

bt.setY(120);

bt.setText("Вычислить");

bt.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

// при нажатии кнопки попадает в эту точку

Calculate();

}

});

form.addComponent(bt);

form.show();

}

public void Calculate()

{

String s1;

s1=tf1.getText();

Kurs = Double.parseDouble(s1);

s1=tf2.getText();

Bucks=Integer.parseInt(s1);

Rubles=Kurs*Bucks;

Rubles=Math.floor(Rubles*100);

Rubles=Rubles/100.0;

s1=Double.toString(Rubles);

s1="Ответ "+s1;

lb.setText(s1);

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

}

 

Компоненты формы:

Form form;

Label lb;

TextField tf1;

TextField tf2;

Button bt;

 

Установка настройки формы:

 

// переменная d – размер по x и y

Dimension d=new Dimension(200,200);

Display.init(this);

form = new Form();

// установка желательного размера экрана, который не установится

form.setPreferredSize(d);

form.setTitle("лабораторная 2");

// получение реальных размеров экрана, например 240х320

w=form.getWidth();

h=form.getHeight();

// тип размещения компонент – прямые координаты x,y

CoordinateLayout e = new CoordinateLayout(w,h);

form.setLayout(e);

// Размещение Label lb

lb=new Label();

lb.setX(20);

lb.setY(30);

lb.setText("Введите курс и количество долларов");

form.addComponent(lb);

 

От левого края формы на 20 пикселов, от верхнего на 30

 

Результат работы приложения:

 

 

менеджеры размещений:

form.setLayout(null); // не использовать менеджер размещений

CoordinateLayout e = new CoordinateLayout(w,h);

form.setLayout(e);

 

Менеджеры размещений позволяют автоматизировать размещение компонент на форме.

Типы менеджеров мобильных приложений:

 

пример автоматического размещения:

 

 

Библиотека Math для мобильных приложений имеет немного функций:

 

sin() cos() tan() sqrt()

 

нет, например, exp(), log(), и т.д.

 

 

public void Calculate()

{

String s1;

s1=tf1.getText();

Kurs = Double.parseDouble(s1);

 

s1=tf2.getText();

Bucks=Integer.parseInt(s1);

Rubles=Kurs*Bucks;

Rubles=Math.floor(Rubles*100);

Rubles=Rubles/100.0;

s1=Double.toString(Rubles);

s1="Ответ: "+s1;

lb.setText(s1);

}

 

3) Обработка события на выход из textfield

Пример калькулятор: В двух текстовых полях вводится вещественное и целое число. В момент выхода из поля (потеря фокуса) выполняется их суммирование и результат выводится в Label. Если набрано неверно, поле очищается и выводится «неправильно”. При нажатии на кнопку приложение завершается.

 

 

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Form1->Top=0;

Form1->Left=0;

Form1->Width=500;

Form1->Height=300;

Form1->Caption="Лабораторная 2";

// Label1

Label1->Left=20;

Label1->Top=10;

Label1->Width=400;

Label1->Height=40;

Label1->Caption="Ответ: ";

// edit1

Edit1->Left=20;

Edit1->Top=80;

Edit1->Width=100;

Edit1->Height=20;

Edit1->Text="0.0";

// edit2

Edit2->Left=180;

Edit2->Top=80;

Edit2->Width=100;

Edit2->Height=20;

Edit2->Text="0";

Button1->Left=20;

Button1->Top=130;

Button1->Width=140;

Button1->Height=20;

Button1->Caption="Завершить";

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Close(); // завершение приложения

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Exit(TObject *Sender)

{

Calculate(); // при выходе из Edit1

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Enter(TObject *Sender)

{

// получение фокуса

}

 

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Enter(TObject *Sender)

{

//

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Exit(TObject *Sender)

{

Calculate();// при выходе Edit2

}

 

void TForm1::Calculate()

{

double first;

int second;

double Sum;

BOOL p;

p=true;