Swing (Java)
Swing — інструментарій для створення графічного інтерфейсу користувача (GUI) мовою програмування Java. Це частина бібліотеки базових класів Java (JFC, Java Foundation Classes).
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Gui-widgets.png/300px-Gui-widgets.png)
Swing розробляли для забезпечення функціональнішого набору програмних компонентів для створення графічного інтерфейсу користувача, ніж у ранішого інструментарію AWT. Компоненти Swing підтримують специфічні look-and-feel[en] модулі, що динамічно підключаються. Завдяки їм можлива емуляція графічного інтерфейсу платформи (тобто до компоненту можна динамічно підключити інші, специфічні для даної операційної системи вигляд і поведінку). Основним недоліком таких компонентів є відносно повільна робота, хоча останнім часом це не вдалося підтвердити через зростання потужності персональних комп'ютерів. Позитивна сторона — універсальність інтерфейсу створених програм на всіх платформах.
Історія
ред.На початку існування Java класів Swing не було взагалі. Через слабкі місця в AWT (початковій GUI системі Java) було створено Swing. AWT визначає базовий набір елементів керування, вікон та діалогів, які підтримують придатний до використання, але обмежений у можливостях графічний інтерфейс. Однією з причин обмеженості AWT є те, що AWT перетворює свої візуальні компоненти у відповідні їм еквіваленти, що не залежать від платформи, які називаються рівноправними компонентами. Це означає, що зовнішній вигляд компонентів визначається платформою, а не закладається в Java. Оскільки компоненти AWT використовують «рідні» ресурси коду, вони називаються ваговитими (англ. highweigh).
Використання «рідних» рівноправних компонентів породжує деякі проблеми. По-перше, у зв'язку із різницею, що існує між операційними системами, компонент може виглядати або навіть вести себе по-різному на різноманітних платформах. Така мінливість суперечила філософії Java: «написане один раз, працює скрізь». По-друге, зовнішній вигляд кожного компонента був фіксованим (оскільки усе залежало від платформи), і це неможливо було змінити (принаймні, це важко було зробити). По-третє, використання ваговитих компонентів тягнуло за собою появу нових обмежень. Наприклад, ваговитий компонент завжди має прямокутну форму і є непрозорим.
Незабаром після появи початкової версії Java, стало очевидним, що обмеження, властиві AWT, були настільки незручними, що потрібно було знайти кращий підхід. У результаті з'явились класи Swing як частина бібліотеки базових класів Java (JFC). В 1997 році вони були включені до Java 1.1 у вигляді окремої бібліотеки. А починаючи з версії Java 1.2, класи Swing (а також усі останні, що входили до JFC) стали повністю інтегрованимими у Java.
Архітектура
ред.Цей розділ потребує доповнення. (липень 2008) |
- Незалежність від платформи: Swing — платформо-незалежна бібліотека, що означає, що програму з використанням Swing можна запустити на всіх платформах, які підтримують JVM.
- Можливість для розширення: Swing — дуже розподілена архітектура, яка дозволяє «підключати» реалізації користувача вказаної інфраструктури інтерфейсів: користувачі можуть створити свою власну реалізацію цих компонентів, щоб замінити компоненти без обумовлення (за замовчуванням). Взагалі, користувачі Swing можуть розширити структуру, продовжуючи (з допомогою extends) існуючі класи і/або створюючи альтернативні реалізації основних компонентів.
Приклад
ред.Наступний код демонструє основи використання Swing. Ця програма зображує вікно (JFrame), у вікні міститиметься кнопка з написом «Натисніть сюди» на ній та написом праворуч «Ця кнопка не робить нічого:».
package com.example;
// Імпортує swing і AWT класи
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;
/**
* Простий приклад використання Swing
*/
public class SwingExample {
public static void main(String[] args) {
// Упевнюємося, що всі виклики Swing/AWT виконуються Event Dispatch Thread ("EDT")
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Створюємо JFrame, що має вигляд вікна з "декораціями",
// наприклад заголовком і кнопкою закриття
JFrame f = new JFrame("Приклад вікна Swing");
// Установлюємо простий менеджер розмітки, що впорядковує всі компоненти
f.setLayout(new FlowLayout());
// Додаємо компоненти
f.add(new JLabel("Ця кнопка не робить нічого:"));
f.add(new JButton("Натисніть сюди!"));
// "Пакує" вікно, тобто робить його величину відповідну до її компонентів
f.pack();
// Встановлюємо стандартну операцію закриття для вікна,
// без цього вікно не закриється після активування кнопки закриття
// (Стандартно HIDE_ON_CLOSE, що просто приховує вікно)
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
// Уснановлюємо видимість=істина, тим самим показуючи вікно на екрані
f.setVisible(true);
}
});
}
}
Література
ред.- Matthew Robinson, Pavel Vorobiev: Swing, Second Edition, Manning, ISBN 1-930110-88-X
- David M. Geary: Graphic Java 2, Volume 2: Swing, Prentice Hall, ISBN 0-13-079667-0
- John Zukowski: The Definitive Guide to Java Swing, Third Edition, Apress, ISBN 1-59059-447-9
- James Elliott, Robert Eckstein, Marc Loy, David Wood, Brian Cole: Java Swing, O'Reilly, ISBN 0-596-00408-7
- Kathy Walrath, Mary Campione, Alison Huml, Sharon Zakhour: The JFC Swing Tutorial: A Guide to Constructing GUIs, Addison-Wesley Professional, ISBN 0-201-91467-0
- Joshua Marinacci, Chris Adamson: Swing Hacks, O'Reilly, ISBN 0-596-00907-0
- Герберт Шилдт: SWING: руководство для начинающих. — М.: «Вильямс», 2007. — С. 704. — ISBN 0-07-226314-8
- Иван Портянкин: Swing: Эффектные пользовательские интерфейсы, Санкт-Петербург ISBN 5-469-00005-2
Посилання
ред.- Підручник Swing від Sun [Архівовано 29 липня 2005 у Wayback Machine.]