Новости
  • Тренировка у Guillaume Lorentz, Париж, Франция

    Тренировка у Guillaume Lorentz, Париж, Франция

    Наша ученица Настя Цехмейструк, отдохнув в Париже, совместила приятное с еще более... 
    Читать полностью

  • Adrenaline фестиваль, Киев

    Adrenaline фестиваль, Киев

    6 октября в Киеве прошел фестиваль Adrenaline, который представлял собой отборочный тур... 
    Читать полностью

  • Melpo Melz

    Melpo Melz

    Шведская танцовщица и исполнительница дансхолла  Читать полностью →

JFC проти AFC: Який графічний інтерфейс краще?

  1. Основні компоненти AFC і JFC
  2. Філософія проекту і загальна архітектура
  3. Моделі обробки подій і їх швидкодія
  4. Модель подій AFC (гібрид моделей подій AWT 1.0 і 1.1)
  5. Модель подій JFC (підходить тільки для моделі подій AWT 1.1)
  6. Гнучкість і можливості розширення
  7. Інтеграція з AWT
  8. Сумісність з JavaBeans
  9. Перехід від існуючіх Додатків AWT и IFC до Нових технологій
  10. Від AWT до JFC
  11. Від IFC до JFC
  12. Переносимість та підтримка браузерів
  13. Додаткові возможности
  14. Простота освоєння і використання
  15. Висновок
  16. Як запускати програми Microsoft AFC з використанням пакета Sun JDK 1.1
  17. Джерела информации

Минулого місяця в JavaWorld були опубліковані дві статті, в яких порівнювалися Java Foundation Classes (JFC) компанії Sun і Application Foundation Classes (AFC) корпорації Microsoft. Автори даної статті розвивають цю тему і більш детально розглядають деякі питання: два засоби проектування графічного інтерфейсу користувача (GUI) порівнюються з позицій ефективності, гнучкості, розширюваності, переносимості, архітектурних особливостей і зручності використання. Аналізуються також простота освоєння кожного з двох інструментальних засобів і можливість переписування існуючих додатків, створених на базі технології AWT, з використанням класів JFC або AFC. Крім того, пояснюється, як можна виконувати додатки AFC за допомогою пакета Sun JDK 1.1.

Багато розробники поставлені перед дилемою: яку з технологій вибрати в якості основного інструменту для створення нових додатків. Після появи JFC і AFC фахівці з проектування графічного інтерфейсу користувача на базі Java розділилися на два табори. У даній статті ми постаралися повністю відволіктися від політичних ігор, маркетингового натиску і особистих пристрастей і представити вичерпні порівняльні характеристики JFC і AFC, що дозволяють зробити об'єктивні висновки і вибрати засіб, в найбільшою мірою задовольняє вашим потребам.

У минулому році гігантські темпи розвитку бібліотек основних класів Java вражали уяву. Роль основних конкурентів пакета Microsoft Application Foundation Classes (AFC) взяли на себе JFC (що став наступником широко відомої бібліотеки Abstract Windowing Toolkit, що входить до складу JDK) і розроблений компанією Netscape набір Internet Foundation Classes (IFC). Проект JFC передбачає створення окремого набору класів, повністю сумісного з JDK 1.1. Перша його реалізація стане частиною ядра Java і увійде до складу JDK 1.2. У свою чергу бібліотека AFC забезпечує зворотну сумісність з JDK 1.0, прекрасно працює з JDK 1.1, і є всі підстави вважати, що цей продукт буде нормально взаємодіяти і з майбутніми версіями JDK. Ми вважаємо, що як AFC, так і JFC в даний час мають досить стійке положення на ринку і виглядають вельми багатообіцяюче.

Основні компоненти AFC і JFC

JFC включає в себе п'ять складових частин:

  • AWT;
  • Swing (набір засобів для створення GUI на базі Java);
  • Java 2D API;
  • Accessibility API;
  • Засоби підтримки drag-and-drop.

    Пакет AFC, пропонований корпорацією Microsoft, являє собою альтернативу JFC Swing. До його складу входять:

  • UI - еквівалент Swing і AWT з JFC;
  • FX - пакет, що забезпечує поліпшену підтримку графіки, шрифтів і кольору і включає в себе деякі допоміжні класи.

    Зауважимо, що AFC не підтримує технологію drag-and-drop, але розробник може вбудувати в додаток можливості drag-and-drop, якщо скористається пакетом Microsoft Java Software Development Kit (SDK).

    Основна увага в нашій статті буде приділено порівнянні JFC Swing і AFC. Крім того, ми коротко торкнемося засобів роботи з двовимірної графікою і технологією drag-and-drop, а також розглянемо доступність, простоту освоєння і можливості застосування обох пакетів. Для зручності абревіатура "JFC" буде застосовуватися для позначення будь-якої складової частини пакета.

    Філософія проекту і загальна архітектура

    Можливості пакетів JFC і AFC зі створення графічного інтерфейсу істотно перевершують можливості бібліотеки AWT, що входить до складу JDK. Крім того не можна не відзначити поліпшену продуктивність і адаптованість до використання на самих різних платформах. І JFC і AFC своєму розпорядженні широкий набір засобів, що дозволяють ефективно вбудовувати різні елементи GUI в більшість додатків Java. Бібліотеки JFC і AFC розроблялися з метою:

  • "Полегшення" (за рахунок відсутності peer-компонентів);
  • підвищення продуктивності;
  • забезпечення узгодженого зовнішнього вигляду на різних платформах;
  • створення розширеного набору елементів GUI з поліпшеними можливостями;
  • реалізації "чистого" коду Java (за рахунок відсутності "рідних" бібліотек).

    І все ж, незважаючи на зовнішню схожість, в основі AFC і JFC лежить принципово різна архітектура:

  • JFC базується на технології JDK 1.1 Lightweight UI Framework, що дозволяє створювати ефективні елементи, які легко адаптуються до роботи з існуючими моделями AWT. Компоненти JFC є похідними від класів AWT. На відміну від цього AFC ґрунтується на власній оригінальній архітектурі. В даній бібліотеці реалізована ієрархія класів, приблизно відповідна ієрархії AWT. Компоненти AFC повністю незалежні від класів AWT.
  • JFC жорстко пов'язана з моделлю делегування подій JDK 1.1. У свою чергу AFC підтримує моделі подій JDK 1.0 і 1.1 на рівні API, проте внутрішня реалізація моделі подій заснована на версії 1.0.
  • JFC підтримує архітектуру Model-View-Controller (MVC), а також модульний підхід до організації взаємодії з користувачем. Пакет AFC орієнтований на екранний інтерфейс Windows і може застосовуватися на самих різних платформах. Минулого місяця в JavaWorld були опубліковані дві статті, в яких порівнювалися Java Foundation Classes (JFC) компанії Sun і Application Foundation Classes (AFC) корпорації Microsoft Малюнок 1.
    Ієрархія класів AWT, AFC and JFC.

    У кардинальну відмінність архітектур AFC і JFC немає нічого дивного. Зрештою, AFC претендує на витіснення AWT, хоча спеціальні засоби і забезпечують сумісність даної бібліотеки з компонентами AWT. Пакет JFC є розширенням AWT. Він базується на архітектурі AWT, до якої додаються міць технологи MVC і гідності модульного побудови.

    Моделі обробки подій і їх швидкодія

    У технологіях JFC Swing і AFC застосовуються різні підходи до підтримки моделей обробки подій, реалізованих в JDK 1.0 і 1.1. Як результат, суттєво відрізняється і їх швидкодія.

    JFC Swing базується виключно на моделі делегування подій JDK 1.1. Частково це пояснюється тим, дана модель стала основою для внутрішньої реалізації деяких компонентів JFC. Зазвичай класи JFC, що відповідають за взаємодію з користувачем, повинні вести облік всіх подій і в залежності від цього визначати подальшу поведінку програми. Клас зазвичай реєструє для елемента управління пов'язаний або навіть свій власний код, який виступає в ролі інтерфейсу-слухача відповідних компонентів. Взаємодія між компонентами класів JFC і конкретної програмної реалізацією призначеного для користувача інтерфейсу, як правило, ґрунтується на моделі делегування або передачі подій. Наприклад, клас дерева JFC для відстеження подій, які генеруються мишею, реєструє себе в якості інтерфейсу-слухача компонента JTree. Внаслідок нової політики обробки подій, що застосовується в JDK 1.1 і побудованої за принципом "все або нічого", не можна гарантувати безпечного отримання та подальшого поширення подій, підтримуваних версією 1.0.

    Для внесення ясності варто відзначити, що хоча JFC і є розширенням JDK 1.1 AWT, яка має зворотну сумісність з моделлю подій версії 1.0, самі компоненти JFC не успадкують цю сумісність. Модель подій AFC є гібридом моделей JDK 1.0 і 1.1. Вона забезпечує підтримку API 1.1 на базі реалізації моделі 1.0. На відміну від підходу "все або нічого", характерного для JDK, інтерфейс AFC переадресує всі події версії 1.1 класу, що знаходиться на більш високому рівні ієрархії, як ніби ці події відносяться до версії 1.0.

    Розробникам слід врахувати, що хоча AFC і підтримує API моделі подій 1.1, ця технологія не дозволяє скористатися всіма перевагами моделі подій JDK 1.1, яка виключає дублювання і поширення небажаних подій. При використанні бібліотеки AFC інтерфейс-слухач подій версії 1.1 реєструється в контейнері і може бути переключено даними контейнером на обробку подій версії 1.0. Таким чином, продуктивність програми не тільки не збільшується, але і ризикує ще більше знизитися, якщо додаток одночасно буде використовувати моделі подій версій 1.0 та 1.1. На нашу думку, моделі подій AFC властиві серйозні недоліки, що не дозволяють підвищити швидкодію і масштабувати складні додатки. При використанні тільки моделі подій JDK 1.1 додатка JFC можуть досягти найвищої продуктивності, зменшивши одночасно трафік подій. Однак умова підтримки технологією JFC тільки моделі подій версії 1.1 призведе до того, що всі програми, сумісні з версією 1.0, доведеться переписати для оновленої версії JFC. З іншого боку, бібліотека AFC забезпечує найпростіший спосіб перенесення додатків, що використовують модель подій старої версії 1.0.

    Малюнок 2.
    Просте додаток з кнопкою на екрані з панеллю управління.

    На малюнку проілюстрована різниця між моделями подій AFC і JFC. При натисканні кнопки додатки AFC генерують чотири події, в той час як програми JFC обмежуються лише одним.

    Передбачається, що слухач ActionListener зареєстрований для кнопки, а слухач MouseListener - для панелі.

    Модель подій AFC (гібрид моделей подій AWT 1.0 і 1.1)

    Два виклику методу postEvent пересилають подія AWT 1.0 MouseEvent з компонента в його контейнер, а подія actionPerformed активізує слухача ActionListener, зареєстрованого для кнопки. Зверніть увагу на те, що активізується і слухач MouseListener, також зареєстрований для панелі. Це пов'язано з тим, що на панелі генерується подія AWT 1.0 MouseEvent.

    Модель подій JFC (підходить тільки для моделі подій AWT 1.1)

    Додаток викликає слухача ActionListener, зареєстрованого для кнопки. Небажані або дубльовані події виключаються.

    Гнучкість і можливості розширення

    При створенні додатків з графічним інтерфейсом розробники зобов'язані звернути особливу увагу на:

  • Механізм зв'язування графічного призначеного для користувача інтерфейсу з основною логікою програми та процедурами обробки даних.
  • Способи використання наявних і успадкованих компонентів GUI для створення потужного і ефективного призначеного для користувача інтерфейсу.

    На практиці найчастіше розробники пов'язують наявні конструкції GUI з логікою програми, після чого вбудовують в додаток модулі додаткових компонентів. В результаті і JFC, і AFC дозволяють забезпечити необхідну гнучкість і розширюваність.

    Іноді єдиним можливим варіантом розширення функціональності є розбиття компонентів AFC на підкласи або вбудовування інтерфейсів AFC UI. Даний підхід видається і найбільш простим. Використовуючи численні методи, реалізовані в високорівневих класах компонентів UI, не так вже й складно розробити власні компоненти (що є похідними від класів або підкласів UI), які органічно впишуться в систему AFC.

    Розширити систему JFC можна трьома основними способами:

    1. Якщо необхідно зберегти певний стиль екранного інтерфейсу, можна або скористатися стандартними конструкціями JFC UI, або доповнити необхідними функціями вже наявні напрацювання.

    2. Структури даних, що використовуються в компонентах JFC, мають гарну розширюваністю. Кожен компонент JFC містить посилання на інтерфейс моделі даних і дозволяє вбудовувати цей інтерфейс за замовчуванням. Розробники часто звертаються до моделі даних, реалізованої за замовчуванням, доповнюючи її власними розширеннями або замінюючи деякі функції.

    3. Якщо бібліотека JFC не містить потрібного компонента, а попередні два методи не дозволяють домогтися бажаного результату (не вдається створити необхідний компонент на основі наявних підкласів JFC GUI), можна спробувати безпосередньо звернутися до конструкцій AWT Lightweight UI і отримати новий компонент на базі високорівневих класів AWT або JFC Swing. Архітектура JFC MVC, в якій графічний інтерфейс відділений від специфічних структур даних програми, знижує необхідність виведення компонентів GUI з базових класів. При розробці додатків на базі технологій AFC або AWT створення графічного інтерфейсу на основі логіки додатка практикується значно частіше.

    Що стосується гнучкості, JFC надає програмістам можливості тонкої настройки і зміни структури компонентів GUI в процесі розробки, а користувачі можуть налаштовувати інтерфейс за своїм смаком вже під час виконання програми. Оскільки в пакеті AFC відсутня такий засіб, як MVC, а для поліпшення інтерфейсу можна використовувати додаткові модулі, коректніше було б порівняти можливості, наявні в обох програмних продуктах. Одним з таких властивостей є гнучкість об'єднання різних компонентів при створенні користувальницького інтерфейсу. У загальному випадку AFC дозволяє додати фактично будь-який елемент, зробивши його "спадкоємцем" вже наявного компонента. Зокрема, за допомогою засобів пакету можна не тільки зробити будь-який елементарний компонент (наприклад, кнопку або пояснювальний напис) дочірнім вузлом більш складної конструкції дерева, а й вбудувати в інтерфейс дерево в якості дочірнього компонента кнопки або яка б пояснила написи. Іншим прикладом може стати компоновка вузлів дерева з складових елементів (списків, комбінованих списків і навіть таблиць). Конкретні способи вбудовування компонентів жорстко не регламентуються і залишають досить широкий простір для творчості. З іншого боку, незважаючи на той факт, що кожен компонент JFC є підкласом контейнера AWT і може програмним шляхом вбудовуватися в будь-який інший компонент JFC, додавання складних елементів до простих часто може приводити до несподіваних результатів. Це обумовлено двома причинами:

  • По-перше, будь-який компонент завжди переадресує запит на оновлення екрану свого базового класу. У свою чергу базовий клас намагається проаналізувати середовище функціонування компонента і виконує обробку в залежності від характеру цього середовища.
  • По-друге, деякі складові компоненти, такі як Jtree і Jtable не дозволяють безпосередньо додавати підлеглі елементи, а натомість пропонують більш доступного режиму представлення даних (Renderer / Editor). Зокрема, якщо ви додасте компонент Jtree до Jbutton, клас Jbutton буде вважати, що вмістом об'єкта є текст або зображення, і не стане виводити дерево на екран. Наведемо ще один приклад. Якщо ви додасте кнопку в якості вузла дерева, відображатися на екрані вона буде нормально, але функція, яка повинна виконуватися при натисканні кнопки, буде втрачена.

    Ми не збираємося детально обговорювати концепцію засобів Renderer і Editor, однак розглянемо основні труднощі, які можуть виникнути в процесі відображення набору складних, різнопланових елементів при обробці складових компонентів JFC механізмом Renderer / Editor. Підхід, який використовується в пакеті AFC, значно простіше, зрозуміліше і забезпечує більшу гнучкість.

    Інтеграція з AWT

    Компоненти AFC UI несумісні з AWT, оскільки вони не підтримують ієрархію цієї бібліотеки класів. Компоненти AFC не можна помістити в контейнер AWT. (Наприклад, клас UIButton не можна використовувати спільно з класом Panel AWT.) Однак в складі AFC є засоби інтеграції двох систем. Компоненти AFC UI, оброблені відповідним адаптером AWT, можуть додаватися до контейнера AWT. Наприклад, для того щоб додати UIButton до класу Panel AWT, буде потрібно адаптер AwtUIButton. У свою чергу компоненти AWT, поміщені в контейнер AFC UIAwtHost, нормально працюють в будь-яких додатках AFC.

    Компоненти JFC Swing, створені на базі класів AWT, являють собою природне розширення AWT і можуть використовуватися спільно іншими компонентами AWT в тому ж самому контейнері. Але при цьому необхідно враховувати один момент. Оскільки технологія базується на архітектурі AWT Lightweight UI, набір SwingSet успадковує всі недоліки цієї архітектури: якщо на екрані відбувається перекриття елементів, найскладніші об'єкти даного рівня повинні знаходитися "нагорі" незалежно від бажаного порядку оновлення екрану. Однак цей недолік не пов'язаний з технологією і конкретною реалізацією JFC. Тим, кого цікавить це питання, рекомендуємо більш детально ознайомитися з документацією JDK 1.1 AWT.

    Сумісність з JavaBeans

    У той час як компоненти JFC Swing повністю сумісні з технологією JavaBeans, існуючі на сьогоднішній день класи AFC UI поки не можуть цим похвалитися. У версії 1.1 AFC з'явився засіб SimpleBeanInfo, що реалізує адаптери класів AWT. Дані адаптери використовують в якості базового класу AWT Panel і забезпечують сумісність з компонентами Beans. Виникає питання, чи можна застосовувати адаптери AWT в якості об'єктів Beans, що забезпечують користувачеві доступ до всіх компонентів AFC UI? За замовчуванням компоненти AFC не дозволяють створювати JAR-файл. Щоб переконатися в сумісності класів з компонентами JavaBeans, ми спробували об'єднати відповідні компоненти AFC в JAR-файл, підтримуваний JDK 1.1, і завантажити файл в середу BeanBox пакета Beans Developer Kit (BDK), розробленого компанією JavaSoft. При використанні компонентів AFC в деяких випадках виникали виняткові ситуації. В ході аналогічного тестування з пакетом Symantec Visual Cafe були отримані приблизно такі ж результати. На підставі цього можна зробити висновок, що AFC не забезпечує повну сумісність з JavaBeans.

    Перехід від існуючіх Додатків AWT и IFC до Нових технологій

    Від AWT до AFC

    Перехід від Додатків AWT до AFC повинен пройти відносно безболісно, ​​тому что модель AFC дуже нагадує модель AWT. Найпростішім способом є приведення імен класів керуючих елементів AWT до виду UI, а імен графічних класів - до виду Fx. Наприклад, класи List і BorderLayout повинні бути замінені на UIList і UIBorderLayout. Клас Graphics необхідно перейменувати в FxGraphics. Оскільки інтерфейс прикладних програм AFC в основному схожий на API AWT, велика частина коду AWT швидше за все компілюватиметься і виконуватися правильно, хоча конструкції більшості керуючих елементів AFC відрізняються від відповідних конструкцій AWT і повинні бути правильно налаштовані. Засіб Awt2afc, що входить до складу Microsoft Java SDK 2.0, спрощує процес перетворення, вставляючи необхідні коментарі і вказівки в вихідний код AWT. Однак для остаточного перетворення коду і раніше без модифікації вручну не обійтися.

    Від AWT до JFC

    JFC є надбезліччю AWT, тому перехід від AWT не викликає ускладнень і дозволяє додаткам AWT використовувати модель подій JDK AWT 1.1. Додавши до імен класів керуючих елементів префікс "J", ви перетворите програму AWT в додаток JFC Swing. Керуючі класи AWT будуть нормально взаємодіяти з класами JFC. Для адаптації коду обробки подій до моделі EventListener можуть знадобитися деякі незначні зміни. Однак якщо переносний додаток було написано з використанням моделі подій JDK AWT 1.0, обійтися без хірургічного втручання не вдасться. Доведеться видаляти код обробки подій і замінювати його на інтерфейс слухача. Хоча відділення коду управління подіями від коду UI і не можна назвати простою процедурою, вона може виявитися досить корисною і в значній мірі полегшити підтримку та подальшу модернізацію.

    Крім змін імен класів і моделі подій доведеться вносити деякі модифікації для переходу до архітектурі MVC.

    Від IFC до JFC

    Бібліотеку Internet Foundation Classes (IFC), розроблену компанією Netscape, багато хто називає попередницею JFC. Попередні варіанти JFC безперервно удосконалюються, і в черговий версії JFC Swing 0.7 можна виявити чимале схожість з IFC. Хоча окремі важливі компоненти IFC повністю перенесені в JFC, перехід від IFC до JFC передбачає не тільки зміну імен класів у вихідному коді, але і значно глибшу реструктуризацію додатки. Компанії JavaSoft і Netscape створили спеціальні засоби, що допомагають розробнику здійснити перехід від технології IFC до JFC, але на даний момент ми не маємо достовірної інформації про можливості і характеристики даних коштів. Виходячи зі свого досвіду, можемо з упевненістю заявити, що практична реалізація процедури автоматичного перетворення вихідного коду IFC до формату JFC - це дуже складне завдання. Швидше за все розробники все одно будуть поставлені перед необхідністю ручної модифікації або навіть повного переписування вихідного коду IFC.

    Переносимість та підтримка браузерів

    Оскільки і бібліотека JFC, і AFC написані на "чистому" Java, теоретично вони можуть виконуватися на будь віртуальній машині Java (JVM) і на будь-якій платформі. Найбільш поширені браузери і віртуальні машини, що підтримують JFC і AFC, представлені в таблиці.

    Віртуальна машина Java Версія JFC AFC 1.0.2 AFC 1.1 JDK VM 1.0.2 Ні Так Ні 1.1.x Так Ні ** Так * Internet Explorer 3.0.x Так (з ранніми версіями Activator) Так Ні 4.0.x Так Так Так Netscape 3.0 .x Так (з майбутніми версіями Activator) Так Ні 4.0.4 Потрібні кошти JDK 1.1 Так * Так * Примітки:
    * Докладніша інформація викладена в розділі "Як запускати програми Microsoft AFC з використанням пакета Sun JDK 1.1", що знаходиться в кінці статті.
    ** Теоретично AFC 1.0.2 має зворотну сумісність з версією 1.0 віртуальної машини пакета JDK 1.1. Однак в документації на AFC 1.0.2 нічого не говориться про підтримку JDK 1.1 VM, а наші випробування підтвердили, що AFC 1.0.2 некоректно працює на JDK 1.1.x.

    Додаткові возможности

    Досвід роботи з бібліотекою AWT показав, що її можливостей явно недостатньо для отримання повноцінних візуальних ефектів. До складу бібліотеки AFC включено велику кількість класів, імена яких починаються з префікса "Fx". Ці класи забезпечують додаткову підтримку роботи зі шрифтами і кольором, поліпшену обробку тексту і розширений прикладний програмний інтерфейс для графічних примітивів. Деякі компоненти AFC реалізують додаткові функції. Серед них можна виділити обертання тексту, створення фону на основі текстур і обробку складних графічних об'єктів. Двовимірний прикладний програмний інтерфейс JFC дозволяє створювати потужні, гнучкі та завершення конструкції, що підтримують управління шрифтами і кольором, друк, висновок різних зображень, обробку тексту, перетворення в просторі і інші можливості, що відрізняються широтою і глибиною. Повнофункціональні засоби роботи з двовимірної графікою і програмними зображеннями, реалізовані в API JFC, значно перевершують конструкції Microsoft Fx. Функції двовимірної графіки, що входять до складу API добре взаємодіють з конструкціями Swing і UI. При цьому компоненти Swing не пов'язані прямою залежністю з API, але можуть значно розширити візуальні можливості прикладного програмного інтерфейсу. Перша реалізація Swing базувалася на підтримці графіки AWT, а майбутні версії будуть використовувати всі можливості роботи з двовимірної графікою, вбудовані в мову Java. З іншого боку класи Microsoft Fx є ключовими елементами бібліотеки AFC. У багатьох випадках класи і інтерфейси Fx безпосередньо використовуються не тільки компонентами AFC, але і кодом програми AFC.

    Бібліотека AFC не підтримує технологію drag-and-drop. Хоча в одному з прикладів, пропонованих Microsoft, і демонструвалися можливості drag-and-drop, вивчивши код, ми прийшли до висновку, що дані функції вбудовані безпосередньо в платформу Windows. В цьому відношенні пакет JFC явно виділяється в кращу сторону. У ньому реалізована не тільки від платформи незалежна підтримка технології drag-and-drop для клієнтів Java GUI, але і можливості інтеграції із засобами drag-and-drop, розробленими для конкретної платформи. Це дозволяє будь-яким клієнтам Java використовувати в своїх додатках всі переваги технології drag-and-drop.

    Як в AFC, так і в JFC Swing вбудовані засоби "додаткового доступу", що дозволяють клієнтам, які не мають можливості працювати з компонентами GUI, скористатися іншими технологіями.

    Простота освоєння і використання

    Як вже говорилося вище, JFC є розширенням бібліотеки класів AWT, що входить до складу пакету JDK 1.1, і кожен компонент JFC можна вважати подклассом відповідного класу AWT. На відміну від цього базовий клас UIComponent бібліотеки Microsoft AFC є прямим спадкоємцем java.lang.Object, а ієрархія класів AFC ніяк не пов'язана з ієрархією AWT. Але як не дивно, у внутрішній реалізації AFC і AWT є чимало спільного. Багато особливості архітектури AFC успадковані від AWT. Будь-який фахівець, знайомий з концепцією AWT, зуміє швидко і без особливих зусиль усвідомити концепцію AFC.

    З іншого боку бібліотека JFC дозволяє створювати значно більш складні конструкції. Архітектура MVC і можливості вбудовування додаткових модулів виводять JFC на принципово інший якісний рівень:

  • JFC пропонує модель зосереджених даних, докорінно відрізняється від традиційних засобів створення графічного інтерфейсу, з якими звикли мати справу розробники.
  • В основі JFC лежать зовсім нові технології (такі, як UIManager, DirtyRegionManager, Renderer, Editor, Tree RowMapper і TreePath). Кожна з них або є унікальною, або зустрічається вкрай рідко, тому розробникам потрібно чимало часу на їх освоєння.
  • Складні компоненти (Tree, Table, TextComponent і деякі інші) є дуже потужним інструментом, але вбудувати їх в додатки непросто. Всі вони базуються відразу на декількох класах. Як типовий приклад можна привести клас Tree, який має власні інтерфейси (MutableTreeNode, RowMapper, TreeCellEditor, TreeCellRenderer, TreeModel, TreeNode, TreeSelectionModel) і класи (DefaultMutableTreeNode, DefaultTreeModel, DefaultTreeSelectionModel і TreePath). В основі деяких з цих класів і інтерфейсів лежать ідеї, значення яких не цілком зрозуміло. Для того щоб розібратися з ними, потрібно ретельне вивчення документації та експерименти з поставляються прикладами програм. Інші компоненти, такі як Table і Text, також містять вбудовані класи. Прикладний інтерфейс кожного з цих компонентів є невеликою програмну конструкцію, з якої розробник зобов'язаний досконально розібратися.

    Коротше кажучи, перш ніж почати ефективно використовувати міць JFC, програмісту крім AWT потрібно вивчити наступні засоби:

  • модель делегування подій JDK 1.1 AWT;
  • архітектуру Model-View-Controller (MVC);
  • кошти Renderer / Editor і способи їх використання в складових компонентах, таких як списки, комбіновані списки і дерева;
  • спеціалізовані API, що поставляються з кожним складним компонентом.

    Крім того, розробник, який бажає самостійно створювати нові компоненти, які розширювали б можливості наявних класів JFC, повинен добре розбиратися в наступних питаннях:

  • архітектурі JDK 1.1 AWT Lightweight UI Framework;
  • порядку вбудовування додаткових модулів, призначених для вдосконалення графічного інтерфейсу;
  • способах поновлення екранного подання (з використанням інтерфейсів і класів DirtyRegionManager, RepaintManager і ін.);
  • концепції створення двовимірної графіки.

    Щоб ефективно застосовувати AFC, розробник повинен добре знати теоретичні основи JDK AWT. Творцеві компонентів AFC крім цього необхідно розбиратися у внутрішній структурі AFC, а також в технології роботи з двовимірної графікою. Прикладний програмний інтерфейс AFC цілком узгоджується зі стилем AWT і інтуїтивно зрозумілий будь-якій людині, знайомому з цією бібліотекою.

    Пакет AFC був розроблений для заміни AWT. Незважаючи на те, що архітектура цих двох продуктів принципово різна і несумісна, набір API AFC дуже схожий на свого попередника. Таким чином, програміст, який працює з бібліотекою AWT, здатний освоїти його в найкоротші терміни. Бібліотека класів JFC є розширенням AWT і успадковує її ієрархію. Програмісту, який бажає використовувати всю міць класів JFC, доведеться протягом тривалого часу вивчати складні конструкції даної бібліотеки. Ми вважаємо, що пакет AFC дозволить розробнику додатків на базі AWT найбільш ефективно застосувати отримані знання, в той час як для освоєння JFC досвід, набутий в ході роботи з AWT, вже не настільки важливий. Додаткові витрати часу стануть своєрідною платою за переваги, які дає архітектура MVC.

    Висновок

    Бібліотека Microsoft AFC проста в освоєнні і використанні. Ймовірно, перенесення додатків, створених на основі GUI JDK 1.0, на платформу JDK 1.1 за допомогою AFC не зажадає значних зусиль. Однак необхідно враховувати, що модель подій AFC є застарілою і неефективною. Компоненти, розроблені на базі бібліотеки AFC, можуть виявитися несумісними з технологією Beans. У той же час AFC тісно пов'язана з такими продуктами, як Microsoft Internet Explorer і SDK, хоча її можна використовувати і в якості автономної бібліотеки класів. Пакет JFC повністю сумісний з компонентами Beans і побудований на базі ефективної моделі подій, що дозволяє значно підвищити продуктивність. Перенесення існуючих додатків, створених на основі класів AWT і моделі делегування подій JDK 1.1, на платформу JFC не викликає ніяких труднощів. Однак використання основних переваг JFC потребують структурних змін коду програми. Крім того, вивчення конструкцій JFC само по собі є нелегким завданням.

    Як ви вже могли помітити, обидва засоби розробки мають свої переваги і недоліки. Якщо ви хочете покращувати додаток за допомогою додаткових модулів або розробляти ефективні об'єктно-орієнтовані програми і вам потрібна гнучкість і масштабованість архітектури MVC, то немає причин для коливань. Очевидним вибором є JFC, а витрати на освоєння цієї бібліотеки окупляться сторицею. Якщо ж від вас вимагається швидко розробити невелике і не дуже складний додаток, ми рекомендували б звернути увагу на AFC.

    Чіоні ліан, Кевін Луо і Тоні Жань працюють старшими консультантами в компанії InkMark, що займається розробкою програм на Java і наданням консультаційних послуг. Адреси їх електронної пошти: [email protected] , [email protected] и [email protected] .

    Як запускати програми Microsoft AFC з використанням пакета Sun JDK 1.1

    За замовчуванням бібліотека класів Application Foundation Class (AFC) 1.1, що входить до складу пакету Microsoft SDK for Java 2.0, функціонує тільки під управлінням віртуальної машини Java, що поставляється разом з SDK 2.0. Однак, змінивши деякі настройки AFC, нескладно адаптувати її до роботи з JDK 1.1. Всі приклади програм зі складу пакета Microsoft SDK for Java 2.0 успішно виконувалися в середовищі JavaSoft JDK 1.1.5 під управлінням операційної системи Windows NT 4.0. Для проведення адаптації необхідно виконати наступні дії:

    1. Встановіть пакет Microsoft SDK for Java 2.0.
    2. Знайдіть файл classes.zip (його розмір становить 7,5 Мбайт), що входить до складу пакету MS SDK for Java 2.0, і розпакуйте його вміст в окремому каталозі (наприклад, в каталозі C: \ afc). Ми виявили копію файлу classes.zip в каталозі c: \ WINNT \ Java \ Classes.
    3. Видаліть файли FxMSVM.class і FxSMVM10.class з каталогу com \ ms \ fx.
    4. Створіть JAR-файл для бібліотек ui, fx і util. Для цього введіть команду: C: \ afc> jar cf afc.jar com \ ms \ ui \ * com \ ms \ fx \ * com \ ms \ util \ *
    5. Вкажіть шлях до файлу afc.jar. C: \ afc> set CLASSPATH = C: \ afc \ afc.jar;% CLASSPATH%
    6. Вийдіть в кореневій каталог пакета Microsoft SDK for Java. Після цього перейдіть в каталог samples \ afc \ statics \ classes. Запустіть на виконання приклад програми за допомогою команди java JDK 1.1: C: \ MS-SDK2.0 \ samples \ afc \ statics \ classes> java SDKSample

    Виконання програми SDKSample нічим не буде відрізнятися від виконання по команді jview SDKSample.

    Слід зауважити, що після даної модифікації AFC позбудеться деяких можливостей, безпосередньо пов'язаних з платформою Windows і / або Microsoft JVM, наприклад, доступу до локальних шрифтів.

    Джерела информации

  • На сторінці, присвяченій AWT, ви зможете знайти всю необхідну інформацію про бібліотеку AWT, що входить до складу пакетів JDK 1.0 і 1.1:
    http://www.javasoft.com/products/jdk/awt/index.html
  • Огляд Java UI. Глави з книги "The Java Tutorial", в яких описується створення призначеного для користувача інтерфейсу на базі Java:
    http://www.javasoft.com/docs/books/tutorial/ui/overview/
  • Нові можливості і перспективи AWT 1.1 на сторінці JDK 1.1 AWT Enhancements:
    http://www.javasoft.com/products/jdk/1.1/docs/guide/awt/designspec/
  • На сторінці JDK 1.1 AWT Event Model докладно описується модель подій AWT:
    http://www.javasoft.com/docs/books/tutorial/post1.0/ui/eventmodel.html
  • На сторінці JDK 1.1 Lightweight UI Framework перераховані основні труднощі, які можуть виникнути при роботі з UI, і способи їх подолання:
    http://www.javasoft.com/products/
    jdk / 1.1 / docs / guide / awt / designspec / lightweights.html
  • Повне керівництво по JDK 1.1 AWT, приклади і посилання на літературу по API AWT 1.1:
    http://www.javasoft.com/products/jdk/1.1/docs/guide/awt/
  • На сторінці для розробника додатків за допомогою засобів Netscape IFC знаходиться введення в бібліотеку IFC, документація, приклади програм і т.д .:
    http://developer.netscape.com/library/ifc/index.html
  • IFC Developer's Guide - повне керівництво розробнику програм на базі засобів IFC:
    http://developer.netscape.com/library/ifc/
    documentation / endium / developerguide / index.html
  • На сторінці Microsoft AFC можна знайти огляд бібліотеки AFC, приклади програм і іншу корисну інформацію:
    http://www.microsoft.com/java/resource/afc.htm ;
  • Сторінка Microsoft SDKJ 2.0 AFC. Введення, статті, документація на API і приклади програм для версії SDKJ 2.0:
    http://www.microsoft.com/java/sdk/20/afc/default.htm
  • На сторінці AFC for JDK 1.0.2 знаходиться введення в AFC 1.0.2 і описуються основні відмінності цієї бібліотеки від версії AFC 1.1:
    http://www.microsoft.com/java/afc/11102tip.htm
  • Відмінності між класами AFC, сумісними з JDK 1.0.2, і класами, призначеними для роботи з JDK 1.1:
    http://www.microsoft.com/java/afc/10211diffs.htm
  • На сторінці JavaSoft JFC наводиться опис JFC і приклади використання класів даної бібліотеки:
    http://www.javasoft.com/products/jfc/index.html ;
  • Swing Connection - новий Web-вузол компанії JavaSoft, що містить останню інформацію про засіб JFC Swing:
    http://java.sun.com/products/jfc/swingdoc-current/in_this_issue.html ;
  • Відповіді компанії JavaSoft на питання, що стосуються JFC:
    http://www.javasoft.com/products/jfc/faq.html
  • Розділ книги "The Java Tutorial", присвячений засобу JFC Swing:
    http://java.sun.com/docs/books/tutorial/post1.0/ui/swing.html
  • Виникає питання, чи можна застосовувати адаптери AWT в якості об'єктів Beans, що забезпечують користувачеві доступ до всіх компонентів AFC UI?
    Дансхолл джем в «Помаде»

    3 ноября, в четверг, приглашаем всех на танцевальную вечеринку, в рамках которой пройдет Дансхолл Джем!

    Клуб Помада: ул. Заньковецкой, 6
    Вход: 40 грн.

    • 22 апреля намечается Dancehall Party в Штанах!
      22 апреля намечается Dancehall Party в Штанах!

      Приглашаем всех-всех-всех на зажигательную вечеринку «More... 
      Читать полностью