Select your language:

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

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

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

Ссылки:

Переход с экрана на экран 

i Когда вы запустите программу или войдете в рабочий цикл мидлета, то автоматически инициализируются объекты классов и конструктор класса Perexod, а работа программы начнется с вызова метода startApp необходимо назначить соответствующие действия клавишам перехода в методе command-Action (> интерфейса CommandListener для обработки пользовательских команд. Переход по кнопке Выход вам уже знаком из предыдущего примера, поэтому оставим все почти без изменения, за исключением информационной команды exitMidlet.

if (с == exitMidlet) {

destroyApp(false); noti£yDestroyed();

}

А теперь вплотную займемся командой Перейти. Что от нас требуется? В момент запуска программы мы попадаем на экран представленный классом Form посредством команды perexodTextBox, а требуется прейти на экран представленный классом TextBox. Для создания обработчика событий команды Перейти нужно сформировать объект класса TextBox, позаботиться о следующей кнопке перехода perexodList для перехода на экран, представленыи классом List, добавить команду Выход для выхода из программы и команду Перейти. Осталось добавить обработчик событий и присоединить созданный TextBox к текущему экрану. Смотрим, что у нас получилось:

if (с == perexodTextBox)

TextBox tb = new TextBox("TextBox", "Текст", 256, 0);

perexodList = new Command("Перейти" , Command.SCREEN, 2);

tb.addCommand(exitMidlet) ;

tb.addCommand(perexodList);

tb. setCornmandListener (this}';

Display . getDisp-lay (this) .setCurrent (tb) ,-

}

Обратите внимание на последнюю строку кода в теле условного оператора i f: Display.getDisplay(this).setCurrent(tb);

В данном случае присоединяется созданный объекЛЬ KnaccaText Box к текущему экрану. Мы говорим о смене экранов для создания четкого и информативного пользовательского интерфейса, на самом деле смены экранов в буквальном смысле не происходит. Сушествуеттолько один дисплей, назначенный для класса Displey, который отвечает за то, что будет нарисовано на экране телефона, аимен-но, какой из объектов Displayable. Только один объект Displayable может быть отображен за один раз на экране. То есть существует всего один физический дисплей, к которому присоединяются необходимые объекты классов пользовательского интерфейса через обработку событий. Имеющийся экран просто постоянно перерисовывается, отображая тот или иной объект востребованного класса, а иначе говоря, к текущему дисплею присоединяется объект класса, создавая иллюзию смены экранов. Системные ресурсы телефонов пока малы, поэтому приходится идти на такие хитрости.

Затем в рассматриваемом примере необходимо перейти на экран представленный классом List. Поскольку мы имеем аналогичные требования к экземпляру этого класса, то обработка событий и создание класса List будут идентичными классу TextBox.

if (с == perexodList)

List mylist = new List ("List", List. IMPLICIT) ;

perexodAlert = new Command("Перейти", Command.SCREEN, 2);

mylist .addCommand(exitMidlet),-

mylist.addCommand(perexodAlert);

mylist.setCommandListener"(this) ;

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

}

Позаботившись о переходе на экран представленный классом Alert и о выходе из приложения, можно создать код для объекта Alert, который впоследствии можно присоединить к текущему экрану. Класс Alert несколько специфичен, это вам станет понятно как только вы откроете окно, отвечающее за отображение объекта. Попробуйте после компиляции рассмотренного примера сделать для Alert команду Выход, и посмотрите, что получится. Теперь соединим рассмотренный код в одно целое, получив готовую программу, представленную в листинге 5.2; Пример также можно найти на прилагаемом к книге компакт-диске в папке \Code\Listing5_2\src.

/**

Листинг 5.2

Переход с экрана на экран */

// подключаем пакеты

Переход с экрана на экран

// обработка команды выход if (с == exitMidlet)

{

destroyApp(false); notifyDestroyed();

}

// обработка команды перехода в TextBox

if (с == perexodTextBox) -

{

TextBox tb = new TextBox ( "TextBox" , "Текст", 256, 0) ;

perexodList = new Command 2) ,-

tb.addCommand(exitMidlet);

tb.addCommand(perexodList);

tb.setCommandListener(this);

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

}

// обработка команды перехода в List if (с == perexodList)

{ ■

List mylist = new List ("List", List .IMPLICIT) ; perexodAlert = new Command ("Перейти", Command. SCREEN,

2);

mylist. addCommand(exitMidlet );

mylist .addCommand(perexodAlert);

mylist. setCommandListener(this);

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

}

// обработка команды перехода в Alert if (с '== perexodAlert)

{

Alert myalert = new Alert ( "Alert" , "Текст",null,null) ; Display. getDisplay (this) . setCurrent (myalert) ;

}

} }

После компиляции примера пройдите по всей программе иубедитесь, что вам понятна общая идея и принцип работы смены экранов, на которых строятся все приложения в Java 2 ME.

5.4. Навигация

Рассмотренный пример из листинга 5.2 раскрыл суть перехода с одного экрана на другой. Как вы заметили, принцип смены экраны довольно прост - доста-

точно добавить необходимую команду с помощью метода addCommand (•), установить обработчик событий для этого экрана и создать код в методе command-Act ion (), адекватно реагирующий на заданные действия.

Познакомившись с моделью смены экранов и закрепив свои знания на практике, можно переходить к более осмысленной навигации в приложении. В предыдущем примере происходила последовательная смена экранов без возможности возврата либо перехода на необходимый экран. Такая структура хороша для изучения, но абсолютно не годится для серьезного приложения. Телефоны различных марок имеют собственные механизмы перехода, предоставляемые операционной системой или прошивкой мобильного телефона. Механизм, использованный в Java 2 ME для приложений созданных на этом языке, предоставляет не менее мощные, а главное, простые средствадля навшации в программе. Самый простой и, как мне кажется, эффективный способ - это использовать автоматически созданное меню при помощи сервиса телефона. Когда вы добавляете к заданному экрану с присоединенным к нему объектом Displayable команды обработки в виде двух подэкранных клавиш, вы имеете всего два видимых варианта клавиш -слева и справа. Как только вы добавите с помощью функции addCommand (> более двух команд, сервис телефона автоматически создаст на правой или левой подэкранной клавише телефона (в зависимости от марки производителя), выпадающее меню. При нажатии клавиши, отвечающей за меню, появится меню, отображающее полный список имеющихся команд. На рис. 5.7 изображено контекстное меню, созданное эмулятором телефона среды программирования J2ME Wireless Toolkit 2.1.

Задав нужные команды для конкретного объекта Di splayable,и создав код их обработки, вы получаете отличный механизм навшации. Но это не единственный способ перехода с экрана на экран. Каждый из четырех

классов Form, List, TextBox и Alert имеет свои встроен-__

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

Итак, к каждому из задействованных классов нам надо добавить набор команд для перехода на нужный экран и об-^ работать, а точнее, создать код, реагирующий на назначенные команды. Рис. 5.8 живописно изображает и отчасти решает i поставленную перед нами задачу.

Теперь сосредоточимся на одном из вариантов программного кода, решающего проблему с навигацией. Первым делом создадим класс, назвав его Navigator.

public class Navigator extends MIDlet implements CommandListener

Рис. 5.7. Автоматически созданное меню

 

Переход - Form

Переход & List Перевод в Alert

Переход в TextBox Переход в List Переход в Alert

Переход »Fcrrn

Переход в TextBcK Переход б AJert

Рис. 5.8. Схема перехода с экрана на экран

В исходном коде до строк вызова конструктора класса Navigator, добавим объект, содержащий команду Выход.

private Command exitMidlet Command.EXIT, 1);

new Command("Выход"

Потом необходимо создать четыре объекта для каждого из задействованных классов Form, TextBox, List и Ale rt. Созданные объекты будут отвечать за обработку команд перехода на экран, представленные соответствующими классами.

private Command perexodTextBox = new Command("В TextBox", Command.SCREEN, 2);

private Command perexodList = new Command("B List", Command.SCREEN, 2) ;

private Command perexodAlert = new Command("B Alert" , .Command.SCREEN, 2) ;

private Command perexodForm = new Command("B Form", Command.SCREEN, 2) ;

Информативные названия всех объектов понятны, но, естественно, выбранные мною названия ни к чему вас не обязывают. Созданные объекты являются объектами класса Command, отвечающего за создание команд, которые в последствии можно определить для каждого из классов Form, TextBox, Li s t и Al e rt. Позже, в коде мидлета, мы будем задавать соответствующие блоки обработки событий непосредственно в методе commandAct ion () при помощи оператора if и созданных объектов.

Теперъ нам нужно объявить и инициализировать объекты четырех классов Form,TextBox, ListnAlert. 1

private Form myform private List mylist List.IMPLICIT);

private TextBox mytextbox "Текст", 256, 0);

new Form("Это объект класса Form"); new List("Это объект класса List",

new TextBox("Это TextBox'

private Alert myalert = new Alert ("Это Alert", "Alert исчезнет",null,null);

private Display mydisplay; .

В конструкторе класса Navigator происходит инициализация объекта mydisplay.

public Navigator ()

mydisplay = Display. getDisplay (this) ;

>

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

public void startApp () • {

myform.addCommand(exitMidlet); myform.addCommand(perexodTextBox); myform.addCommand(perexodList); myf orm. addCommand (perexodAlert) myform.setCommandListener(this); mydisplay. setCurrent (inyform) ,-

}

■Последняя строка метода startApp (j отображает объект myf orm на дисплее со всеми имеющимися командами. Как уже говорилось, командам, которым не хватит телефонных клавиш.будет автоматически создано свое собственное меню.

После того как вы попадете в основное окно приложения, которое мы определили для объекта my f о гт, над левой или правой подэкранной клавишей появится команда выхода из приложения и команда Menu. При нажатии на клавишу Menu, на экране телефона появится всплывающее меню с добавленными ранее командами перехода на экраны, представленные классами TextBox, List и Alert,

Следующей нашей задачей является написание кода для обработки событий созданных команд в методе commandAction (). Код, обрабатьшающий команду Выход из приложения, идентичен коду из примера в листинге 5.2 и в большинстве рассматриваемых впоследствии примеров останется таковым. Дальнейшие действия состоят в обработке команды перехода на экран, представленный классом TextBox.

if (с == perexodTextBox) * {

mytextbox.addCommand(exitMidlet);

Сразу после того, как пользователь попадетна экран, представленный классам Form , ив контекстном меню выберет команду Перейти в TextBox, произойдет обработка блока команд perexodTextBox. Добавляются все команды к oбъeктymytextbox,ycтaнaБливaeтсяoбpaбoтчик событий ив итоге отображается текущий экран, содержащий в се созданные компоненты объекта my textbox. Точно так же как и на экране с объектом myform существует меню перехода и кнопка выхода.

Обработка событий для объекта my list происходит с помощью команды perexodList и аналогично рассмотренному коду для объекта mytextbox. Стойлишьразницей, что используются соответствующие командыдля объекта mylist. В итоге листинг 5.3 связываетвсе разрозненные фрагменты кода этого подраздела, собирая воедино очень простую ивто же время, мощную программу отличной системы навигации.

^■к -к

Листинг 5.3

Навигация в приложении

V

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

public class Navigator extends MIDlet implements CommandListener

{

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

private Command exitMidlet = new Command("Выход", Command.EXIT, 1);

// команда перехода в TextBox 4

private Command perexodTextBox" = new Command ("B TextBox", Command.SCREEN, 2) ;

// команда перехода в List

private Command perexodList = new Command("B List", Command. SCREEN, 2) ,-

//. команда перехода в Alert

private Command perexodAlert = new Command("B Alert", Command.SCREEN, 2) ;

// команда перехода в Form

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


Для перехода к следующей странице статьи перейдите по вы подающему меню
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