Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Мобильная Java: СтатьиScreen: высокоуровневый объект инкапсулирющий пользовательский интерфейс и расширяющие его классы

Screen: высокоуровневый объект инкапсулирющий пользовательский интерфейс и расширяющие его классы

Screen является абстрактным классом который расширят Displayable класс. Screen обеспечивает подклассы заголовком и бегущей строкой (ticker).

Screen определяет четыре метода:
public java.lang.String getTitle()
public void setTitle (java.lang.String newTitle)
public javax.microedition.lcdui.Ticker getTicker()
public void setTicker (javax.microedition.lcdui.Ticker newTicker)

Первые два метода позволяют установить и получить заголовок. Следующие два метода позволяют установить и получить Ticker.

Ticker - представляет бегущую строку на дисплее. Когда строка оканчивается, бегущая строка стартует снова. Направление 'бега' определяется устройством. Один Ticker может использоваться несколькими Screen'ами.

Пример:

 ...
 TextBox textBox =
  new TextBox("Name","???",50,TextField.ANY);
 Ticker ticker =
  new Ticker("Enter your name");
 textBox.setTicker(ticker);
 textBox.addCommand (okCommand);
 textBox.addCommand (backCommand);
 display.setCurrent (textBox);
 ...

Существует четыре класса расширяющие Screen - List, TextBox, Alert, и Form.

List

List позволяет выбрать пользователю елементы из списка. Каждый элемент в списке представляется строчкой и может иметь Image. Когда список показывается на устройстве, пользователь может его прокрутить, но при этом система не генерирует никаких сообщений. Система извещает приложение только когда происходит выбор команды, через CommandListener.

Существует три типа List: IMPLICIT, EXCLUSIVE и MULTIPLE.
Тип задается при создании List и не может после этого изменяться.
List имеет в своем арсенале методы append, insert, delete.

Exclusive Choice List

Позволяет пользователю выбрать один элемент из списка. Когда выбирается элемент предыдущий элемент автоматически становиться невыбранным. При этом не генеряться никакие события. Извещение происходит только тогда, когда пользователь выбирает одну из ассоциированных со списком команд. После этого используя метод getSelectedIndex (или getSelectedFlags) можно узнать какой элемент выбран. Таким образом, в Exclusive List должны быть добавлены команды иначе он будет бессмысленным.

Пример:

...
private void showTeamList()
{
 List list = new List("Team",Choice.EXCLUSIVE);
 list.append("Rotor", null);
 list.append("Lokomotiv", null);
 list.append("Zenit", null);
 list.addCommand(okCommand);
 display.setCurrent(list);
}

public void commandAction(Command cmd, Displayable d)
{
 if (cmd == okCommand)
 {
  int i = (List)d.getSelectedIndex();
  // делаем что надо
 }
}
...

Multiple Choice List

Позволяет пользователю выбрать ноль и больше элементов из списка. Каждый элемент может быть выбран и не выбран индивидуально, при этом никакие сообщения не генерируются. Когда пользователь выбирает одну из ассоциированных со списком команд, используя метод getSelectedFlags или isSelected можно узнать, какие элементы выбраны.

Пример:
...
private void showTeamList()
{
 List list = new List ("Team", Choice.MULTIPLE);
 list.append ("Rotor", null);
 list.append ("Lokomotiv", null);
 list.append ("Zenit", null);
 list.addCommand (listOkCommand);
 display.setCurrent (list);
}

public void commandAction(Command cmd,Displayable d)
{
 if (cmd == listOkCommand)
 {
  List list = (List)d;
  for (int i = 0; i < list.size(); i++)
  {
   boolean selected = list.isSelected(i);
   // делаем что надо
  }
 }
}
...

Implicit Choice List

Implicit список подобен меню. Как только пользователь выберет элемент и нажмет кнопку Select, сразу же вызывается метод commandAction со специально декларированной командой List.SELECT_COMMAND. Естественно, что для списка должен быть установлен CommandListener.

Пример:
...
private void showTeamList()
{
 List list = new List ("Team", Choice.IMPLICIT);
 list.append ("Rotor", null);
 list.append ("Lokomotiv", null);
 list.append ("Zenit", null);
 list.setCommandListener (this);
 display.setCurrent (list);
}

public void commandAction (Command c, Displayable d)
{
 if (c == List.SELECT_COMMAND)
 {
  List list = (List)d;
  int i = (List)d.getSelectedIndex();
  // делаем что надо
 }
}
...

Textbox

TextBox расширяет Screen класс который позволяет пользователю вводить и редактировать текст.

TextBox имеет единственный конструктор
TextBox (java.lang.String title, java.lang.String text, int maxSize, int constraints)
title - заголовок
text - начальное значение текста который пользователь может редактировать.
maxSize - максимальное количество символов которое может вводить пользователь
(следует заметить что максимальное значение не может быть очень большим, на каждом телефоне оно имеет свое ограничение)
constraints - определяет тип вводимого текста. Существует 6 типов ANY, NUMERIC, PASSWORD, PHONENUMBER, URL, EMAILADDR определенных в классе TextField.

Пример:
...
TextBox textBox =
 new TextBox ("Password","",10,TextField.PASSWORD);
textBox.addCommand (okCommand);
textBox.addCommand (backCommand);
display.setCurrent (textBox);
...

Alert

Alert расширяет Screen класс.

Alert можно сравнить с диалоговым окном оповещающим о какой-то произошедшей ситуации. Помимо текста Alert может содержать опциональный Image.

Alert показывается как любой другой Screen методом display.setCurrent (alert).

Приложение может установить время в течение которого будет показываться Alert используя метод setTimeout (int time) (время устанавливается в миллисекундах). Если необходимо чтобы Alert показывался до тех пор пока пользователь не отреагирует на него следует вызывать setTimeout (Alert.FOREVER) метод со значением Alert.FOREVER.

Mожно установить какой Screen будет показываться на дисплее после Alert'a используя метод display.setCurrent (alert, nextScreen) По умолчанию паказывается текущий Screen.

Существует 5 типов алертов. Они определены в классе AlertType: ALARM , CONFIRMATION, ERROR, INFO, and WARNING. AlertType имеет ассоциированный с каждым типом мелодию, которая проигрывается когда Alert отображается. Используя AlertType.playSound() метод можно воспроизвести мелодию ассоциированную с каким-либо AlertType в любой момент.

Сразу стоит упомянуть о том что в Alert не может быть добавлена ни одна команда. Метод addCommand() при попытке его вызвать будет кидать IllegalStateException.

Пример:
...
private void showMessage (Exception ex)
{
 //Alert alert = new Alert ("Error",
 //ex.getMessage(),errorImage,AlertType.ERROR);

 Alert alert = new Alert ("Error");
 alert.setString (ex.getMessage());
 alert.setImage (errorImage);
 alert.setType (AlertType.ERROR);

 alert.setTimeout (Alert.FOREVER);
 display.setCurrent (alert, frame);
}
...

Form

Form это Screen который может содержать комбинацию Items включая Strings, Images, редактируемые TextFields, редактируемые DataFields, Gauges и ChoiceGroup. Каждый из этих классов производный от Item класс и может быть добавлен в Form. Расположение элементов на экране устройства, скроллинг зависит от устройства. Form имеет методы которые позволяют вставлять, удалять, добавлять Items.

Item абстрактный суперкласс для всех компонентов, которые могут быть добавлены в Form. Все Items имеют заголовок, который показывается на экране обычно выше самого Itema.

Item определяет всего 2 метода:
public void setLabel (java.lang.String label)
public java.lang.String getLabel()

String и StringItem - могут быть добавлены в Form. StringItem является классом, который 'обертывает' String. Когда в Form добавляется String, он автоматически превращается в StringItem. И если вы захотите получить данный Item из Form, то будет возвращен StringItem, а не String.

Пример:
...
private void showOptions()
{
 Form form = new Form ("Options");

 StringItem countryItem = 
  new StringItem ("Country", "Russia");
 StringItem townItem = 
  new StringItem ("Town", "St-Peterburg");

 form.append (countryItem);
 form.append (townItem);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setCommandListener (this);
 display.setCurrent (form);
}
...

Image и ImageItem - могут быть добавлены в Form. ImageItem является классом, который 'обертывает' Image и позволяет Image позиционироваться относительно других элементов в Form. ImageItem имеет 6 констант которые позволяют это делать: LAYOUT_LEFT, LAYOUT_RIGHT, LAYOUT_CENTER, LAYOUT_NEWLINE_BEFORE, LAYOUT_NEWLINE_AFTER и LAYOUT_DEFAULT. Данные константы могут комбинироваться например:
LAYOUT_LEFT + LAYOUT_RIGHT = LAYOUT_CENTER

ImageItem имеет следующий конструктор
public ImageItem (java.lang.String label, javax.microedition.lcdui.Image img, int layout, java.lang.String altText)
label - заголовок элемента
image - Image объект
layout - комбинация констант
altText - алтернативный текст показываемый если устройство не может отобразить Image.

Пример:

...
private void showOptions()
{
 Form form = new Form ("Options");

 Image imageMail = null;
 Image imageNewMail = null;
 try
 {
  imageMail = Image.createImage("/icons/mail.png");
  imageNewMail = Image.createImage("/icons/newmail.png");
 }
 catch (IOException ex)
 {
  ex.printStackTrace();
 }

 ImageItem firstItem = new ImageItem
 ("First",imageNewMail,ImageItem.LAYOUT_LEFT,"mail");
 ImageItem secondItem = new ImageItem
 ("Second",imageNewMail,ImageItem.LAYOUT_RIGHT,"newmail");
 ImageItem thirdItem = new ImageItem
 (
  "",
  imageMail,
  ImageItem.LAYOUT_NEWLINE_BEFORE+ImageItem.LAYOUT_CENTER,
  "newmail"
 );
 
 form.append (firstItem);
 form.append (secondItem);
 form.append (thirdItem);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setCommandListener (this);
 display.setCurrent (form);
}
...

DateField это компонент, который представляет дату и время. DateField может отображать только дату, только время, и дату и время одновременно. Значение даты может быть установлено методом setDate(), в случае если дата не будет установлена, устройство должно показать, что время не известно.

Пример:
...
private void showDate()
{
 Form form = new Form ("Date&Time");
 DateField time =
  new DateField ("Time", DateField.TIME);
 DateField date =
  new DateField ("Date", DateField.DATE);
 DateField dateAndTime =
  new DateField ("Date&Time", DateField.DATE_TIME);

 time.setDate(
  new java.util.Date (System.currentTimeMillis()));
 dateAndTime.setDate(
  new java.util.Date (System.currentTimeMillis()));

 form.append (time);
 form.append (date);
 form.append (dateAndTime);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setCommandListener (this);
 display.setCurrent (form);
}
...

Gauge показывает числовое значение от нуля до заданного. Gauge может быть интерактивным и не интерактивным. В случае если Gauge интерактивный, то его текущее значение можно получать при помощи ItemStateListener.

public Gauge(java.lang.String label, boolean interactive, int maxValue, int initialValue) throws IllegalArgumentException
label - заголовок элемента
interactive - если true то Gauge интерактивный
maxValue - максимальное значение которое может принимать Gauge, минимальное значение всегда ноль
initialValue - начальное значение счетчика в диапазоне [0 ... maxValue].

Пример:
...
Gauge gauge;
public void itemStateChanged (
 javax.microedition.lcdui.Item item)
{
 if (item == gauge)
 {
  System.err.println ("value = " + gauge.getValue());
 }
}

private void showGauge()
{
 Form form = new Form ("Volume");
 gauge = new Gauge ("", true, 10, 5);
 form.append (gauge);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setItemStateListener (this);

 display.setCurrent (form);
}
...

TextField позволяет пользователю вводить и редактировать текст в Forme.

TextField имеет единственный конструктор
TextField (java.lang.String title, java.lang.String text, int maxSize, int constraints)
title - заголовок
text - начальное значение текста который пользователь может редактировать.
maxSize - максимальное количество символов которое может вводить пользователь
(следует заметить что максимальное значение не может быть очень большим, на каждом телефоне оно имеет свое ограничение)
constraints - определяет тип вводимого текста. Существует 6 типов ANY, NUMERIC, PASSWORD, PHONENUMBER, URL, EMAILADDR.

Пример:
...
 Form form = new Form ("midlet.ru");
 TextField textField = new TextField
 ("e-mail","midlet.ru@midlet.ru",32,TextField.EMAILADDR);
 form.append (textField);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setCommandListener (this);
 display.setCurrent (form);
 ...

ChoiceGroup определяет список элементов который может быть добавлен в Form. ChoiceGroup подобна List, но поддерживает только exclusive и multiple режимы.

Тип задается при создании ChoiceGroup и не может после этого изменяться.
ChoiceGroup имеет в своем арсенале методы append, insert, delete.

Exclusive ChoiceGroup

Позволяет пользователю выбрать один элемент из списка. Когда выбирается элемент предыдущий элемент автоматически становиться невыбранным. При этом вызывается метод itemStateChanged класса ItemStateListener

Пример:
...
ChoiceGroup choiceGroup;
private void showTeamList()
{
 Form form = new Form ("Form");

 ChoiceGroup choiceGroup = 
  new ChoiceGroup ("Team", Choice.EXCLUSIVE);
 choiceGroup.append ("Rotor", null);
 choiceGroup.append ("Lokomotiv", null);
 choiceGroup.append ("Zenit", null);

 form.append (choiceGroup);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setItemStateListener (this);
 form.setCommandListener (this);
 display.setCurrent (form);
}

public void itemStateChanged (
 javax.microedition.lcdui.Item item)
{
 if (item == choiceGroup)
 {
  System.err.println ("choiceGroup = " + 
         choiceGroup.getSelectedIndex());
 }
}
...

Multiple ChoiceGroup

Позволяет пользователю выбрать ноль и больше элементов из списка. Каждый элемент может быть выбран и не выбран индивидуально. При этом вызывается метод itemStateChanged класса ItemStateListener

Пример:
...
ChoiceGroup choiceGroup;
private void showTeamList()
{
 Form form = new Form ("Form");

 choiceGroup = new ChoiceGroup ("Team", Choice.MULTIPLE);
 choiceGroup.append ("Rotor", null);
 choiceGroup.append ("Lokomotiv", null);
 choiceGroup.append ("Zenit", null);

 form.append (choiceGroup);

 form.addCommand (backCommand);
 form.addCommand (okCommand);

 form.setItemStateListener (this);
 form.setCommandListener (this);
 display.setCurrent (form);
}

public void itemStateChanged (
 javax.microedition.lcdui.Item item)
{
 if (item == choiceGroup)
 {
  for (int i = 0; i < choiceGroup.size(); i++)
  {
   System.err.println (i + " = " + 
                choiceGroup.isSelected (i));
  }
 }
}
...

Автор Mank
www.midlet.ru

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95