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;