Показать сообщение отдельно
Старый 10.11.2008, 05:04   #22
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

2. В яве нет понятия основной цикл программы, как и в Дельфи. Это событийная среда. Ну да дело ваше.
У меня в потоке (как в МП) всё выполняется, там есть цикл условно бесконечный. В нём всякие меню, вывод текста и т. п. Суть программы грубо говоря просто показывать текст и менюшки. Менюшки вложены друг в друга, всё полностью в канвасе обрабатывается. Но кроме того мне надо сделать ввод текста. Было решено сделать как в опере мини. То есть всё реализовано в канвасе, только текст вводится в ТекстБоксе. И всего две команды: "Назад" и "Далее". И команды эти нужно обрабатывать только в ТекстБоксе, в канвасе команды не используются вообще. Я вывел в отдельный метод в отдельном классе код, который переключает в режим отображения ТекстБокса, ожидает набирания текста и нажатия одной из двух команд. После этого происходит переключение обратно в режим канваса и метод возвращает либо null (если была нажата команда "Назад"), либо строку, которую пользователь ввёл в ТекстБокс (если была нажата команда "Далее"). А из того, основного цикла программы я просто потом в нужном месте вызываю этот метод для вывода на экран ТекстБокса, ожидания ввода текста и нажатия команды. А затем обыкновенным условием проверяю, что вернул метод. Если null, значит пользователь нажал "Назад", если не null, значит пользователь нажал "Далее" и вернулась строка. И я не представляю, как мне это передедать так, чтобы в commandAction происходила полная обработка команд. Ведь мне не надо, чтобы в зависимости от того, какая команда была нажата, вызывался тот или иной метод. Веь мне нельзя прервать основной цикл программы. Ну а как тут без цикла - я вообще не представляю даже. Даже если я каждую менюшку вынесу в отдельный метод, то как заставить commandAction вызывать именно ту, которая мне нужна? Писать по две команды ещё и на каждую менюшку? А если менюшек много, придётся воодить много переменных. А если я захочу ещё несколько менюшек добавить? Мне потом ещё придётся добавлять эти переменные в тот класс, который implements CommandListener. Короче, мне кажется, что я всё сделал оптимально. Теперь я могу менять всё собственно в основном цикле программы, и не вспоминать о том, как там у меня работает вывод текстбокса или текста, или менюшек. Просто вызываю нужный метод и всё отрисовывается, выводится и т. п. Разве не это одно из основных правил ООП? У меня есть класс, который универсально работает, мне не нужно каждый раз в нём что-то править, если я захотел ввести мелкие изменения в основном цикле программы. Во как.
(Offline)
 
Ответить с цитированием