JavaFX у дії
Продовжимо знайомство з платформою JavaFX, призначеної для створення Ria Internet Applications (RIA). Платформа ця, нагадаю, позиціонується корпорацією Sun Microsystems як альтернатива таким загальновизнаним метрам, як Adobe Flash та Microsoft Silverlight.
Минулого разу, якщо пам'ятаєте, ми з вами обговорювали переважно мовні особливості платформи, а саме - JavaFX Script, ту саму мову, яку пропонує компанія Sun для написання RIA-додатків для цієї платформи. Хоча мова ця ми обговорили в досить загальних рисах, проте, думаю, все було досить зрозуміло - адже JavaFX Script досить простий і дуже схожий на Java.
Зараз обговоримо ще деякі особливості цієї мови, а потім приступимо безпосередньо до того, заради чого взагалі взялися за нього - тобто, до написання наших з вами RIA-додатків.
У будь-якій мові так чи інакше доводиться працювати з наборами однотипних об'єктів. Їх можна називати по-різному: колекції, послідовності, множини, масиви. У різних мовах програмування використовуються різні терміни, і масив, мабуть, найбільш широко використовуваний із них. Під масивом зазвичай розуміють неієрархічну колекцію об'єктів, розташованих поряд у пам'яті та доступні за індексом - номер елемента в масиві. У JavaFX Script така колекція називається послідовністю.
Послідовності - досить цікавий тип даних щодо поводження з ними в програмному коді. Дві різні послідовності можна порівнювати звичайним оператором "=", який поверне істину тільки в тому випадку, якщо кількість елементів у послідовності однакова, і елементи під однаковими номерами рівні. Для маніпуляцій елементами є спеціальні оператори, що застосовуються до послідовностей – sizeof, insert, delete, reverse. Потрібнівони, відповідно, для того, щоб дізнаватися кількість елементів у послідовності, вставляти в неї елементи, видаляти їх із неї та змінювати їх порядок на зворотний. Перший та останній оператори застосовуються до всієї послідовності, а другий та третій - до окремих її елементів.
Втім, послідовності, хоч би якими корисними вони були, сьогодні вже не є чимось дивовижним для сучасної мови програмування. Набагато цікавіша інша мовна можливість JavaFX Script'а - прив'язка одних змінних до інших.
У чому полягає суть прив'язки даних у цій мові програмування? У тому, що коли ви змінюєте значення одного об'єкта, то змінюється значення прив'язаного об'єкта - автоматом, без будь-яких додаткових зусиль з вашого боку. Під об'єктом тут розуміється як екземпляр якогось класу, а й інша сутність у програмі - змінна, функція, послідовність. У JavaFX Script'і для прив'язки використовується оператор bind, а виглядає сама вона так (без лапок): "def y = bind x;". Зауважте, що хоча ключовим словом def ми визначаємо константи - змінні, які не можна змінити програмно простим присвоєнням значення, ми можемо змінювати їх, якщо здійснимо прив'язку до будь-якої змінної.
Загалом цілком очевидно, для чого саме була задумана прив'язка - вона дуже зручна тоді, коли нам потрібно візуалізувати значення якихось змінних. Це дуже простий і елегантний спосіб прив'язки внутрішньої логіки додатку до його інтерфейсу користувача.
Думаю, проста прив'язка даних – річ цілком очевидна. Давайте подивимося, як можна здійснити прив'язку до функцій. Це продемонстровано у лістингу.
Перша частина лістингу - та сама пов'язана функція, до якої здійснюється потім прив'язка. Другачастина - клас, екземпляр якого ми прив'язуватимемо. Далі йде код, який демонструє прив'язку даних. Змінюючи значення myX і myY, ви легко зможете переконатися в тому, що прив'язка даних дійсно працює.
Якщо вже ми поговорили про прив'язку даних, то варто сказати, мабуть, пару слів і про таку можливість, як тригери - у практиці програмування на JavaFX Script'і вони будуть не зайвими.
Тригер – це певний код, який прив'язаний до змінної. Він буде виконуватися щоразу, коли змінюється значення цієї змінної. Навіщо це може знадобитися? Це спосіб реагувати на якісь дії користувача, зміни в прив'язаних до GUI змінних і т.д. і т.п.
Як нескладно здогадатися, код у лістингу займається тим, що друкує в консолі старе значення змінної (oldValue - але можна змінити назву), та був - нове (ім'я самої змінної). Варто зауважити, що тригер спрацьовує і тоді, коли змінна ініціалізуються, і це необхідно враховувати під час програмування тригерів.
Packages - куди ж без них, рідних
Як не дивно, пакети оголошуються ключовим словом package. Не надто оригінально, зате звично та зрозуміло. До пакетів, як і у випадку з Java, можна застосовувати модифікатори доступу, про які ми з вами досить докладно встигли поговорити минулого разу - тільки, якщо пам'ятаєте, у JavaFX Script цих модифікаторів дещо більше, ніж у Java.
Власне, про пакети, напевно, сказати більше нічого, тому перейдемо до другого пункту нашої сьогоднішньої програми - побудови додатків з використанням вивченої нами мови програмування на платформі JavaFX.
Додатки власною персоною
Минулого разу ми домовилися проте, що будемо використовувати стандартне середовище розробки, пропоноване Sun Microsystems - або NetBeans. Думаю, якщо ви дійсно зацікавилися JavaFX (а якщо ви читаєте вже другу статтю поспіль, тобто всі підстави для подібних думок), то у вас вже є все необхідне - JavaFX SDK, і JDK, і NetBeans IDE. Втім, якщо ні, то все потрібне можна скачати з сайту javafx.com.
Отже, давайте приступимо. Запускаємо NetBeans, якийсь час насолоджуємось заставкою, а потім знаходимо в меню "Project" пункт "New". Серед запропонованих варіантів вибираємо єдиний, пов'язаний з JavaFX, і в майстрі нового проекту, що з'явився на екрані, вказуємо його назву і місцезнаходження. Натискаємо ще один раз "ОК" і отримуємо у своє розпорядження автоматично згенерований код, який виглядатиме точнісінько так, як код у лістингу.