Select your language:

Home Главная | Registration Регистрация | Login Вход

Menu Меню сайта
Statistics Статистика

Total online: Онлайн всего: 1
Guests: Гостей: 1
Members: Пользователей: 0
Study entry Форма входа
Логин:
Пароль:
Забыл пароль | Регистрация

Ссылки:

Глава 6. Классы пользовательского интерфейса

В Java 2 ME имеется пакет javax.microedition.lcdui, определенный для классов пользовательского интерфейса. Как уже отмечалось в главе 5, классы пользовательского интерфейса разделены на высокоуровневый и низкоуровневый интерфейсы. В этой главе будут последовательно рассмотрены все классы высокоуровневого пользовательского интерфейса. Каждый из разделов содержит информацию об одном конкретном классе, предоставляющем ряд возможностей в оформлении интерфейса пользователя. Используя возможности этих классов, вы сможете создавать в приложении списки, группы элементов, загружать в программу изображения, использовать бегущую строку, назначать шрифт текста и многое другое. В разделах по каждому классу пользовательского интерфейса, анализируются конструкторы, основные методы и константы класса, с помощью которых в конце каждого раздела создается приложение, иллюстрирующее работу этого класса, и ■ приводится листинг всей программы. При рассмотрении методов и констант классов используется только основные компоненты. Для детального анализа составляющих одного из классов обратитесь к приложению 2, которое выполнено в виде справочника по Java 2 ME.

Единственное, о чем необходимо помнить при проектировании и создании пользовательского интерфейса приложения - это об используемом профиле MIDP. В некоторые классы, имеющиеся в составе профиля MIDP 1.0, были добавлены новые методы, константы и даже классы из профиля MIDP 2.О. Например, в классе ChoiceGroupflnfl профиля MIDP 1.0 доступно тринадцать методов, а уже в профиле MIDP 2.0 их насчитывается семнадцать, то есть, добавлено еще четыре новых. В той же документации по Java 2 ME какой-то четкой грани разделяющей два профиля не существует, но при рассмотрении методов и кон-' стантупоминается о принадлежности к одному из профилей. Поэтому при создании приложений, например под профиль, MIDP 1.0, необходимо внимательно планировать разработку программ и не задействовать компоненты профиля MIDP 2.0. Если вы разрабатываете программу для профиля MIDP 2.0, то можете пользоваться всеми имеющимися компонентами вне зависимости от принадлежности к одному из профилей.

6.1. Класс Form

Основным экранным классом примеров из главы 5 служил экран, представленный классом Form. Как вы понимаете это не обязательное условие, но я выбрал класс Form не случайно. Дело в том, что реализация класса Form выполнена

  Механизм работы приложений Java 2 ME

в виде контейнера, позволяющего встраивать в себя различные компоненты пользовательского интерфейса. Это, пожалуй, единственный и самый мощный по своим возможностям класс. Само по себе название Form подразумевает создание некой формы для заполнения экрана телефона. В предыдущих примерах мы использовали, так называемую, пустую форму этого класса в виде чистого экрана. Впоследствии, при упоминании термина форма, будет подразумеваться экран телефона, представленный объектом класса Form для интеграции классов пользовательского интерфейса.

Класс Form имеет два конструктора, необходимых при создании объекта этого класса. Первым конструктором мы уже пользовались, и выгляцит он достаточно просто:

public Form (String title)

Параметры конструктора класса Form:

□ title - заголовок появляется в верхней части созданного окна.

Второй конструктор класса Form имеет уже два параметра, и позволяет встроить компоненты интерфейса в пустую форму, public Form (String title, Item[] items) Параметры конструктора класса Form:

□ title— заголовок окна;

□ items - массив компонентов размещаемых в классе Form.

В классе Form сущзсгвует набор методов, с помощью которых можно добавить, удалить или вставить компоненты интерфейса. Класс Form имеет две наддать ме-' тодов, с помощью которых можно манипулировать компонентами абстрактного класса Item. Всего насчитывается восемь компонентов пользовательского интерфейса в иерархии класса Item. То есть вы создаете экран, за который отвечает класс Form, и интегрируете имеющиеся в вашем распоряжении компоненты класса Item. О самом классе Item и его иерархии мы поговорим в следующем разделе этой главы, после анализа класса Form.

6.1.1. Методы класса Form

Q nit append (Image imcj) = добавляет б форму одно изображение. Класс Image дает возможность загрузить изображение на экран телефона, это может быть фон дисплея, элемент интерфейса;

□ int append (Item item) - этот метод добавляет любой из доступных компонентов класса ItemB созданную форму;

□ int append (String str) - добавляет в форму строку текста;

Q void delete (int itemNum) - удаляет компонент, ссьшающийся на параметр itemNum;

□ void deleteAll () - удаляет все компоненты из имеющейся формы; Item get (int itemNum) - получает позицию выбранного компонента;

□ int getHeight ()'- возвращает высоту экрана в пикселях доступную для встр аиваемых компонентов;

Класс Form

a int getWidth() - возвращает ширину экрана в пикселях доступную для встраиваемых компонентов; .

Q void insert (int itemNum, Item item) —вставляет компонент в форму до определенного компонента;

Q void set (int itemNum, Item item) - устанавливает компонент, ссылающийся на компонент itemNum, заменяя при этом предшествующий компонент;

Q void setltemStateListenerdtemStateListener iListener) -устанавливает nepeMennyro.iLi stener для формы, заменяя при этом предыдущую переменную iListener;

Q int size () - получает количество компонентов в форме.

Благодаря вышеперечисленным методам все компоненты находящиеся в форме, могут быть отредактированы надлежащим образом, например:

Form my form = new Form( "Пример") ; myform.append (iteml); my form.append (i t em2);

В этом примере в созданную пустую форму добавляются два объекта. Оба объекта, разумеется, должны быть созданы в коде. Точно так же можно воспользоваться всеми методами класса Form для редактирования создаваемой формы. Добавленные в форму компоненты организованны в виде колонок и обычно располагаются по ширине всего экрана. На рис. 6 1 изображен эмулятор с несколь-кимикомпонентами интерфейса.

Все компоненты, встроенные в форму, жестко закреплены и не перемещаются Редактировать компоненты можно при помощи методов класса Form, причем присоединенные компоненты располагаются друг под другом, выравниваясь горизонтально. Пользователь может перемещаться по компонентам формы с помощью клавиш Вверх и Вниз. Когда количество добавленных компонентов больше видимой части экрана телефона, то автоматически создается прокрутка. Внизу или вверху экрана появляется стрелочка, сигнализирующая об имеющихся компонентах, выпадающих из зоны видимости. При переходе в нижнюю часть экрана, как только верхний компонент выйдет из зоны видимости, стрелочка автоматически развернется на 180°, указывая в направлении новых компонентов, выпадающих из зоны видимости. Такой механизм реализован в любом телефоне вне зависимости от производителя. Можно добавлять любое количество компонентов в форму, но очевидно, что необходимо задуматься и о дизайне пользовательского ин-

Рис. 6.1. Расположение элементов в форме

терфейса и не валить все «в кучу». Наилучшим решением будет продуманная структура переходов с экрана на экран.

6.2. Класс Нет

Абстрактный суперкласс Item имеет иерархию из восьми подклассов. Каждый подкласс представляет один из элементов пользовательского интерфейса, например, класс TextField, создает текстовые поля ДЛЯ ввода пароля, адреса электронной почты или просто числовых значений. Все восемь классов, по сути, устанавливают компоненты пользовательского интерфейса, которые встраиваются в форму определенную классом Form. На рис 6.2 изображена иерархия абстрактного суперкласса Item

Рис. 6.2. Иерархия суперкласса Item

□ ChoiceGroup - это группа связанных элементов для дальнейшего выбо-. ра предполагаемых действий;

О Custornltem - с помощью этого класса можно добавлять различные графические элементы в форму;

ID Date Field - класс, с помощью которого имеется возможность редактировать время и дату;

О Gauge - допускает графическое отображение диаграмм, процессов загрузки;

О Imageltem - осуществляет показ изображения на экране телефона;

□ Spacer — задает определенное по размерупространство;

□ String Item- с помощью этого класса можно создать произвольный текст. Этот класс не допускает редактирования, он лишь отображает информацию;

□ TextField - предоставляет текстовые поля для редакции.

Любойиз рассмотренных классов наследуется из суперкласса Itemn может быть добавлен на экран, созданный классом Form Каждый компонент класса Item содержит с левой стороны область, где при желании можно отобразить

изображение в виде иконки. При перемещении компонента, иконка также перемещается вместе с компонентом. Класс Item с помощью имеющихся в его составе директив задает, в основном, формат отображения для любого компонента. Формат определяет заданную ширину, высоту или выравнивание компонентов в форме, а также класс Item имеет множество методов осуществляющих контроль над компонентами.

Методы класса Item

□ void addCommand(Command cmd) - добавляет команду к компоненту; О String getLabel () - получает метку объекта Item;

□ int getLayoutO - использует следующие директивы для размещения компонентов в форме:

□ LAYOUT_LEFT - выравнивание по левой стороне;

О LAYOUT RIGHT - выравнивание по правой стороне;

□ LAYOUT CENTER - выравнивание по центру;

□ LAYOUT_TOP - выравнивание к верхней области формы;

О LAYOUT_BOTTOM - выравнивание по нижней стороне экрана;

□ LAYOUT VCENTER- вертикальное выр авнивание по центру. Горизонтальная и вертикальная директивы могут комбинироваться при помощи оператора «|».

□ int getMinimumHeight (> - получает минимальную высоту для компонента;

Q int getMinimumWidth() - получает минимальную ширину для компонента;

Q int getPreferredHeightO - получает предпочтительную высоту компонента;

О int getPreferredWidth() - получает предпочтительную ширину компонента;

Q void notifyStateChangedO - компонент, юдержащийся в форме. Уведомляет объект ItemStateListener о своем состоянии;

Q void removeCommand (Command cmd) - удаляет команду из компонента;

Q void setDefaultCommand{Command cmd) - встроенная команда по умолчанию для данного компонента;

Q void setltemCommandListener (ItemCommandListener 1) - устанавливает обработку событий для компонента;

Q void setLabel (String label) - устанавливает назначенную метку для компонента;

□ void setLayout (int layout) - устанавливает директивы для форматирования компонента;

Q void setPreferredSize (int width, int height) —устанавливает

оптимальную высоту и ширину компонента. . При использовании вышеперечисленных методов можно настраивать и редактировать компоненты класса Item В иерархии класса It em содержится ряд

подклассов, обеспечивающих создание интуитивно понятного пользовательского интерфейса. Давайте рассмотрим эти подклассы.

6.2.1. Класс ChoiceGroup

С помощью класса ChoiceGroup можно встраивать в форму группу элементов. Группы элементов делятся на три типа: эксклюзивный (EXCLUSIVE), множественный (MULTIPLE) и всплывающий (POPUP). Посмотрите на рис 6.3, где показан эмулятор мобильного телефона, показывающий все три группы элементов.

Первый тип группы элементов на рис 6.3, выполнен в виде выпадающего меню и спрограммирован на основе типа POPUP. В данном случае это список из четырех флажков, с помощью которых можно выбрать заданные действия. Четыре флажка в меню были созданы абсолютно произвольно. Количество флажков и как следствие, количество вариантов выбора зависит от задачи поставленной перед программистом. Следующая группа, изображенная на рис. 6.3 представлена типом MULTIPLE. В этой группе элементов пользователь имеет возможность многократного выбора, т.е. можно выбрать сразу несколько вариантов. Обычно такая группа элементов используется при настройке различных опций, где возможно указать сразу несколько вариантов выбора. Третья и последняя группа элементов задается типом EXCLUSIVE, и возможен лишь один вариант выбора заданного флажка. Чтобы создать в приложении необходимую группу элементов нужно воспользоваться конструктором класса ChoiceGroup. Всего имеется два конструктора. Первый конструктор с двумя параметрами:

public ChoiceGroup[String label,int choiceType)

Параметры конструктора ChoiceGroup: О label - это строка текста или информационная метка; □ choiceType - тип, указывающий на создаваемую группу элементов. Его можно задавать, например, следующим образом: Choice. EXCLUSIVE, Choice. MULTIPLEWIH Choice. POPUP. И второй конструктор с четырьмя параметрами, дающий программисту более интересный выбор в использовании графических изображений:

public ChoiceGroup(String label, int choiceType, String[] stringElements, Image[] imageElements)

Рисб.З. Типы группы элементов ChoiceGroup

Параметры конструктора ChoiceGroup: □ String - строка текста;

Q choiceType - тип, указьтаюгций на создаваемую группу элементов; Q s t ringE 1 ement s - заданный массив текста для каждого элемента группы; Q imageEl ement s - заданный массив изображений для каждого элемента группы.

Два последних параметра конструктора класса ChoiceGroup предназначены для создания массива названий и изображений для элементов группы, например, таким образом:

Stringf] string = {"Флаг 0", "Флаг 1", "Флаг 2", "Флаг 3"}

Для того чтобы добавить в пустую форму класса Form все три имеющиеся группы элементов, нужно создать три объекта класса ChoiceGroup и воспользоваться методом append () класса Form, например:

ChoiceGroup group Multiple = new ChoiceGroup ("Группа

Multiple", ChoiceGroup.MULTIPLE) ,-

ChoiceGroup groupPopup = new ChoiceGroup("Группа

Popup",ChoiceGroup.POPUP);

ChoiceGroup groupExclusive = new ChoiceGroup ("Группа

Exclusive", ChoiceGroup.EXCLUSIVE);

Form myform = new Form("Встроенный ChoiceGroup");

myform.append(groupPopup);

myform.append(groupMultiple) ,-

myform.append(groupExclusive);

■ Большой пользы простое статическое отображение элементов группы на дисплее телефона принести не может. Поэтому необходимо познакомится с методами класса ChoiceGroup, с помощью которых можно удалять, добавлять и отслеживать состояние каждого элемента группы.

Методы класса ChoiceGroup

Всего имеется семнадцать методов, ознакомимся с основными и наиболее используемыми методами.

О int append (String stringPart, Image imagePart) - добавляет элемент в группу;

Q void delete (int elementNum) - удаляетзаданный элемент из группы; Q void deleteAll () - удаляет все элементы;

Q Font getFontfint elementNum) - получает используемый шрифт элемента группы;

Q Image getlmage(int elementNum) - получает изображение для элемента группы;

Q int getSelectedFlags(boolean[]selectedArray_return) -возвращает значение Boolean для группы элементов. Обычно эта функция используется с эксклюзивным типом элементов группы;

public class MainClassChoiceGroup extends MIDiet implements CommandListener

t

// команда выхода из приложения

. Q int getSelectedlndex() — возвращает индекс выбранного элемента группы;

□ void insert (int e^mentNum, String stringPart, Image ima-gePart) - вставляет элемент в группу;

□ boolean isSelected (int elementNum) - получает выбранную логическую величину.

□ void set (int elementNum, String stringPart, Image ima-gePart) - устанавливает текст и изображения в заданный элемент группы, при этом удаляя предыдущую запись;

□ void setFont(int elementNum, Font font) - устанавливает шрифт заданному элементу;

□ void setSelectedIndex(int elementNum, boolean selected) -устанавливает особое состояние для элемента группы при использовании множе ствеиного типа;

□ int size () — возвращает количество используемых элементов группы

Прежде чем рассматривать практическую часть раздела, давайте разберемся, что именно от нас требуется чтобы воспользоваться компонентами класса ChoiceGroup. Итак, сначала необходимо создать обь,ект класса Form или пустую форму, куда можно встроить объекты класса ChoiceGroup. Далее необходимо определить, что именно будет происходить при выборе элемента группы. Я предлагаю рассмотреть вариант перехода в новое окно после выбора конкретного элемента группы, Где мы выведем простую информационную надпись. Для этого необходимо создать две команды перехода. Одна из команд будет реагировать на выбранный элемент группы, перемещая пользователя в новое окно, а другая команда перехода - возвращать в окно выбора. Пожалуй, это все что от нас сейчас требуется, поэтому давайте перейдем к реализации этого примера. Предлагаю не рассматривать по отдельности каждый кусок кода всей программы, а проанализировать весь пример целиком, поле чего остановиться на наиболее непонятных местах программного кода. В листинге 6.1 показан исходный код рассматриваемого примера, который находится на компакт-диске в папке \Code\Listing6_l\src.

/**

Листинг б.1 Класс ChoiceGroup */

import javax.microedition.midlet.*; import javax.microedition.lcdui.*;

Basket Корзина
Your basket is empty Ваша корзина пуста
'); $(el).append(g); $(g).show(); } _uPostForm('',{type:'POST',url:'/shop/basket',data:{'mode':'clear'}}); return false; } function removeBasket(id){ if(lock_buttons) return false; else lock_buttons = 1; $('#basket-item-'+id+' .sb-func').removeClass('remove').addClass('myWinLoadS').attr('title',''); _uPostForm('',{type:'POST',url:'/shop/basket',data:{'mode':'del', 'id':id}}); return false; } function add2Basket(id,pref){ if(lock_buttons) return false; else lock_buttons = 1; var opt = new Array(); $('#b'+pref+'-'+id+'-basket').attr('disabled','disabled'); $('#'+pref+'-'+id+'-basket').removeClass('done').removeClass('err').removeClass('add').addClass('wait').attr('title',''); $('#'+pref+'-'+id+'-options').find('input:checked, select').each(function(){ opt.push(this.id.split('-')[3]+'-'+this.value);}); _uPostForm('',{type:'POST',url:'/shop/basket',data:{'mode':'add', 'id':id, 'pref':pref, 'opt':opt.join(':'), 'cnt':$('#q'+pref+'-'+id+'-basket').attr('value')}}); return false; } function buyNow(id,pref){ if(lock_buttons) return false; else lock_buttons = 1; var opt = new Array(); $('#b'+pref+'-'+id+'-buynow').attr('disabled','disabled'); $('#'+pref+'-'+id+'-buynow').removeClass('done').removeClass('err').removeClass('now').addClass('wait').attr('title',''); $('#'+pref+'-'+id+'-options').find('input:checked, select').each(function(){ opt.push(this.id.split('-')[3]+'-'+this.value);}); _uPostForm('',{type:'POST',url:'/shop/basket',data:{'mode':'add', 'id':id, 'pref':pref, 'opt':opt.join(':'), 'cnt':$('#q'+pref+'-'+id+'-basket').attr('value'), 'now':1}}); return false; } //-->
Search Поиск
Calendar Календарь
«  March Март 2011  »
Mon Пн Tues Вт Wed Ср Thurs Чт Fri Пт Sat Сб Sun Вс
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archive records Архив записей

Ссылки:

таунхаусы в Люберцах продажа

Rambler's Top100 Все для дома - Бытовая техника, опубликовать информацию о фирме
QLE 88x31

раскрутка сайта в интернете Рейтинг сайтов Товары / Услуги

Copyright MyCorp © 2011 Создать сайт бесплатно

Copyright MyCorp © 2011