Перші програми Java страждали бідністю інтерфейсів. Більш того, створення інтерфейсу, який запускався б на будь-якій платформі, часто було складним завданням. Проте бібліотека Swing змінила все. Завдяки Swing ваші застосування можуть прекрасно виглядати і прекрасно працювати і під Windows, і під Linux, і на будь-якій іншій платформі.

Swing - це набір для створення багатого графічного інтерфейсу користувача (GUI) для ваших Java програм і аплетів. Він може бути підключений до JDK 1.1, як окрема частина, і увійшов до складу інструментарію для Java2, починаючи з JDK версії 1.2 і далі. Порівняно з бібліотекою AWT, що раніше використалася, бібліотека Swing має ряд переваг. Проте ми зупинимося на наступних чотирьох:

-багатий набір інтерфейсних примітивів

-зовнішній вигляд, що набудовується, на різних платформах (look and feel)

-роздільна архітектура модель-вигляд (model-view)

-вбудована підтримка HTML

Створення складного GUI за допомогою AWT практично неможливе, оскільки в AWT немає основних інтерфейсних примітивів. Swing же надає цей набір і не лише це. Він також робить створення GUI легшим за рахунок вживання набору кордонів (Borders), що набудовуються, і менеджерів розміщення (LayoutManagers).

Відзначимо, що практично всі компоненты Swing починаються з очолюючої букви J (JFrame, JTable, JMenu). Назви всіх компонентів очевидні, і схожі з тими, які використовувалися в AWT. Наприклад, якщо в AWT в ролі вікна верхнього рівня використовувалося Frame, в Swing використовується в аналогічній ролі JFrame.

Другою перевагою Swing є зовнішній вигляд ваших застосувань, що набудовується (Look&Feel). Це означає, що зовнішній вигляд може динамічно змінюватися. Додаток може виглядати як Windows, Unix, або Macintosh програма, або ж може мати вигляд Java програми. Якщо важливо, аби ваше застосування мало зовнішній вигляд програми тієї платформи, на якій ви працюєте, то ця перевага Swing виявиться дуже до речі. Проте найчастіше віддають перевагу зовнішньому вигляду Java програми (MetalLook&Feel), оскільки вона виглядає на всіх платформах добре.

"Мал.1 Приклади зовнішнього вигляду форм при використаннi технології Look&Feel"

 
http://www.realcoding.net/images/swing/GUISwing.gif 

На мал.1 представлені три скриншота однієї і тієї ж програми з різним Look&Feel. MetalLook&Feel позначає зовнішній вигляд програми як Java-програми. Зміна зовнішнього вигляду програми робиться досить просто, наступний уривок коди демонструє це:

public static void main(String [] args){

   //Установка Java Look and Feel (за умовчанням)

   try {

      UIManager.setLookAndFeel(

         UIManager.getCrossPlatformLookAndFeelClassName());

   }

   catch (Exception e) { }

   //остання частина програми

}

Інші аргументи, які можуть бути передані методу setLookAndFeel():

UIManager.getSystemLookAndFeelClassName() – зовнішній вигляд програми, схожої з програмою тієї платформи, на якій додаток запускається.

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel" – зовнішній вигляд Win32 look and feel (лише для Windows).

"com.sun.java.swing.plaf.motif.MotifLookAndFeel" – вигляд Motif (Unix).

"javax.swing.plaf.mac.MacLookAndFeel" -- вигляд Macintosh look and feel (лише для Mac).

Більшість Swing компонентів побудована за модифікованою версією Модель-вигляд-контроллер (MVC) .Це спричиняє за собою розділення між даними компонента(модель) і способу, яким користувач бачить і взаємодіє з ними (вигляд). Наприклад, в додатку з таблицею, дані таблиці повністю незалежні від інтерфейсу користувача. Інтерфейс користувача може динамічно змінюватися, але спочатку дані зв'язуються з розташуванням колонок і стовпців, а потім із зображенням. Якби дані були прив'язані до зображення – зміна зовнішнього вигляду (при підключенні іншого Look&Feel) була б неможливою. Розділення моделі і вигляду в Swing має ряд переваг. Одне з них полягає в можливості підключення різного Look&Feel. Іншою важливою перевагою є можливість застосувати свою модель для компонента інтерфейсу. Наприклад, ви можете створити модель представлення таблиці, яка динамічно отримує колонки і рядки даних і БД.

Вбудована підтримка HTML дозволяє легко змінити зовнішній вигляд компонента.

Всі компоненты, в основі яких лежить текст, підтримують HTML з версії Swing 1.1.1 (або JDK1.2.2). Проте це не повна підтримка HTML. Хоча її сповна вистачає для перегляду простих web-страниц (не зважаючи на можливість створювати сторінки розміром в декілька сотів рядків коду). У деяких застосуваннях можливо використовувати невеликі help-браузери, що використовують теги HTML або HTML, змішаний з компонентами Swing.

Навіть проста програма Swing демонструє ряд важливих концепцій використання бібліотеки.

Кожен Swing-додаток повинен використовувати вікно верхнього рівня. В більшості випадків, як і в нашому прикладі, - це JFrame. Код після створення JFrame демонструє використання анонімного внутрішнього класу. Нам потрібні слухачі подій WindowListener або WindowAdapter для прийняття подій, коли користувач намагається закрити вікно кнопкою управління вікна (хрестик в правому верхньому кутку). Ми могли б написати окремий клас, який розширював би WindowAdapter або успадковував би інтерфейс WindowListener для закриття вікна. Але це була б значна частина коду, яка б виконувала таке невелике завдання. Рациональніше в даному випадку створити внутрішній клас, який розширює WindowAdapter або успадковує WindowListener. Проте найлегшим рішенням є створення внутрішнього класу, який розширює WindowAdapter і перевизначає метод windowClosing, як зроблено в нашому прикладі. Якщо ви поглянете на код, то побачите, що ми просто визначаємо тіло безіменного класу усередині виклику методу addWindowListener. Це користування внутрішніх анонімних класів є найпростішим, легшим і ефективнішим рішенням для прослухування багатьох подій у вашому застосуванні.

Остання частина додатка тривіальна. Ми використовуємо клас InetAddress для визначення адреси IP, потім додаємо цю інформацію до JPanel. Після додавання Jpanel до нашого JFrame, ми викликає методи pack() і setVisible(true). Ці методи повинні викликатися лише після того, як всі елементи були додані до JPanel.

На відміну від Swing, AWT використовує лише стандартні елементи ОС для відображення, тобто для кожного елементу створюється окремий об'єкт ОС (вікно), у зв'язку з чим, AWT не дозволяє створювати елементи довільної форми (можливо використовувати лише прямокутні компоненти), елементи управління на основі AWT завжди відображуються поверх Swing-елементів (оскільки всі Swing компоненти відображуються на поверхні контейнера).

Swing надає гнучкіші інтерфейсні компоненти, ніж раніша бібліотека AWT. На відміну від AWT, компоненти Swing розроблені для однакової платформеної для кросу роботи, тоді як компоненти AWT повторюють інтерфейс виконуваної платформи без змін. Компоненти Swing підтримують специфічні види, що динамічно підключаються, і поведінки (англ. plugable look-and-feel), завдяки якій можлива адаптація до графічного інтерфейсу платформи (тобто до компонента можна динамічно підключити інший, специфічний для операційної системи, у тому числі і створений програмістом вигляд і поведінка). Таким чином, додатки, використовуючі Swing, можуть виглядати як рідні застосування для даної операційної системи. Основним мінусом таких «легковагих» (англ. Lightweight) компонентів є відносно повільна робота. Позитивна сторона — універсальність інтерфейсу створених застосувань на всіх платформах.

 

 

 

Бібліографічний список

 

1.     Інтегрована електронна система довідки середовища розробки NetBeans IDE.

2.     Практічній посібник з вивчення Java, І.Н. Млінців, В.С. Романчік, Універсалпрес 2004.

3.     Містецтво програмування на Java,  Герберт Шилдт, Джеймс Холмс,  Вільямс 2005.

4.     Java. Довідник. 4-і видання,  Девід Фленаган, символ-плюс 2004.

5.     Програмування на Ява, Вязовік Н.А. Вільямс  2003

6.     Технології програмування на Java 2. Книга 2. Розподілені додатки., Х. М. Дейтел, П. Дж. Дейтел, С. І. Сантрі, Біном, 2003