Пользовательский интерфейс, проектирование.

Тема в разделе "WASM.HEAP", создана пользователем Mika0x65, 29 май 2008.

  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Мое почтение всем.

    Прошу прощения за некоторый отход от тематики форума, но есть вопрос.

    Столкнулся с такой задачей: проектирование пользовательского интерфейса "с нуля". Язык -- Java (J2ME). Все, что у меня есть -- событие "keyPress"/"keyRelease". Со вопросами отрисовки, вроде, справился. Основной затык -- диспетчеризация событий.

    Т.е. схема получается такая: некоторый объект имеет фокус, о чем он сам знает и отрисовывает себя соответствующим образом. Вопрос в том, как узнать, что у объекта есть фокус? Я решил это таким путем: существует класс, содержащий все окна в массиве и имеющий индекс объекта, который на данный момент в фокусе. Когда происходит нажатие кнопок вниз/вверх, Focuser узнает об этом и передвигает у себя фокус.

    Такая схема хороша для простых объектов Button, Edit, etc. Проблема начинается с более сложными элементами, например, ComboBox. Он содержит в себе Button и элементы выпадающего списка. Как управлять фокусом в них?

    Я решил так: объекты, по сути, имеют древовидную структуру, т.е. сложные контролы содержат в себе другие контролы, значит и фокус должен передаваться по дереву. Получается, что каждый объект может иметь свой Focuser для дочерних контролов, которые, в свою очередь, имеют (или не имеют) свой Focuser и т.д.

    Беда в том, что мне все это не нравится. Во-первых, хочется максимального отделения диспетчеризации фокусов и сообщений объектам от реализации самих объектов, т.е. чтобы объекты просто получали keyPress/keyRelease и реагировали. Во-вторых, схема не очень удобна: когда происходит потеря фокуса, родительское окно не знает, может ли оно терять фокус -- возможно его держит какой-то дочерний объект (фокус передается последовательно c элемента на элемент). Значит, приходится опрашивать все дерево фокусеров.

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

    Заранее благодарен за ответ.
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Mika0x65
    WinApi?
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    _basmp_
    Ну, у меня вообще-то J2ME платформа.
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Mika0x65
    А посмотреть, как это реализовано в Swing или AWT?
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Mika0x65
    А это какой асм? Он под интел синтаксис или АТ&T ?
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
  7. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
  8. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    Mika0x65
    Как я понял ты разрабатываешь програму под моб.телефоны?
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Xerx
    Есть такая мысль. Беда в том, что Swing довольно монструозная вещь и мне нужно лишь подмножество его возможностей, а конкретно -- передача фокуса и диспетчеризация сообщений. Диспетчеризация сообщения сама по себе проистекает из проблемы фокуса, т.к. по фокусам можно прогнать сообщение по всему дереву контролов, как я понимаю. +у меня нет мышки, которая есть в Swing, что замедлит копание в исходниках. Но, думаю сейчас хотя бы в AWT попробовать разобраться -- он, вроде, проще.
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    _basmp_
    Так это не ассемблер совсем :dntknw:. Это Java. Платформа -- J2ME (MicroEdition), для сотовых телефонов.
    ring4
    Да.
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Mika0x65
    О, а где это чудо скачать? И тулзы и либы и примеры? И скоко оно весит?
     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    _basmp_
    Где скачать не знаю, т.к. взял компоненты не в интернете и поэтому даже не интересовался. Для программирования требуется сама Java (JDK) + Wireless ToolKit. JDK можно скачать с java.sun.com. Тот, которым пользуюсь я (jdk-1_5_0_14) весит 54 MB. WTK 2.2 c апдейтом и туториалом весят 20 МВ. Этого, в принципе, достаточно чтобы запустить программу на Java в эмуляторе. Если надо -- могу выслать/выложить компоненты.
     
  13. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    У меня дома книга есть по J2ME.
    Приду - почитаю для тебя.
     
  14. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279
    Программирование под платформу J2ME напоминает чем-то DOC. А если хотите програмировать "круто" как под Win32, то берите в разработку телефон с операционкой симбион, там будет и многозадачность, и sdk под определенные марки телефона, дают офигительные возможности.
     
  15. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    device
    При чем здесь книга по J2ME? Вопрос по архитектуре программы. На каком языке она написана, в принципе, неважно. Платформу я указал, чтобы было понятнее.

    ring4
    Ну, в J2ME не все так уж плохо. С DOSом сравнение не совсем корректно. DOS -- ОС, а J2ME -- библиотека и окружение. Но если бы у меня был выбор, я бы вообще сотовыми не занимался, скорее всего.
     
  16. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Mika0x65
    Я в курсе, вот потому и говорю, что "посмотеть как там", а не взять оттуда. Но без мышки тяжело, там очень многое на нее завязано насколько помню. AWT проще конечно, но не сильно популярно в тех кругах, где я сталкивался с Java.

    А про программирование мобильников в целом. Я это делал вообще в VS2005, так что в этом случае вообще не советник.
     
  17. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Xerx
    Посмотрел-таки вчера AWT. Библиотека действительно не очень популярная, но она проще чем Swing. Если я правильно их понял, то я на верном пути. В итоге, сделаю так:

    1. При потере/получении фокуса опрашивается все дерево объектов до последнего, содержащего только простые контролы. Если он не против потерять фокус, то объект лишается фокуса и фокус устанавливается на следующий объект.

    2. Сообщения диспетчеризуются, опять же, "по фокусу", Focuser получает сообщение и спрашивает у объекта в фокусе, передавать ли его ниже. Если объект согласен и содержит подобъекты, то сообщение передается дальше.

    Думаю, будет довольно удобно.