Swing (Java): відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Немає опису редагування
Vovk (обговорення | внесок)
Немає опису редагування
Рядок 1:
[[ImageФайл:Gui-widgets.png|thumb|300px|Приклад інтерфейсаінтерфейсу Swing вна Java 5 для [[X Window System]]]]
'''Swing''' — інструментарій для створення [[GUI]] на мові програмування [[Java]]. Це частина [[JFC|бібліотеки базових класів Java]] (''JFC'', Java Foundation Classes).
 
Swing розробляли, щобдля забезпечитизабезпечиння більш функціональнийфункціонального набірнабору програмних компонентів для створення графічного інтерфейсу користувача, ніж у ранішого інструментарію [[AWT (Java)|AWT]]. Компоненти Swing підтримують специфічні ''look-and-feel'' модулі, що динамічно підключаються. Завдяки ним можлива адаптація доемуляція графічного інтерфейсу платформи (тобто до компоненту можна динамічно підключити іншийінші, специфічнийспецифічні для даної операційної системи вигляд і поведінку). Основним мінусомнедоліком таких компонентів є відносно повільна робота, хоча останнім часом це не вдалося підтвердити. Позитивна сторона —-—— універсальність інтерфейсу створених застосунків на всіх платформах.
 
== Історія ==
На початку існування Java класів Swing не було взагалі. Через слабкі місця в AWT (початковій GUI системі Java) було створено Swing. AWT визначає базовий набір елементів керування, вікон та діалогів, які підтримують придатний до використання, але обмежений у можливостях графічний інтерфейс. Однією з причин обмеженості AWT є те, що AWT перетворює свої візуальні компоненти у відповідні їм еквіваленти, що не залежать від платформи, які називаються рівноправними компонентами. Це означає, що зовнішній вигляд компонентів визначається платформою, а не закладається в Java. Оскільки компоненти AWT використовують "«рідні"» ресурси коду, вони називаються ваговитими ({{lang-en|highweigh}}).
 
Використання "«рідних"» рівноправних комонентів породжує деякі проблеми. По-перше, у зв'язку із різницею, що існує між операційними системами, компонент може виглядати або навіть вести себе по-різному на різноманітних платформах. Така мінливість суперечила філософії Java: "«написане один раз, працює скрізь"». По-друге, зовнішній вигляд кожного компонента був фіксованим (оскільки усе залежало від платформи), і це неможливо було змінити (принаймні, це важко було зробити). По-третє, використання ваговитих компонентів тягнуло за собою появу нових обмежень. Наприклад, ваговитий компонент завжди має прямокутну форму і є непрозорим.
 
Незабаром після появи початкової версії Java, стало очевидним, що обмеження, властиві AWT, були настільки важливиминезручними, що потрібно було знайти кращий підхід. в результаті з'явились класи Swing як частина бібліотеки базових класів Java (JFC). В 1997 році вони були включені до Java 1.1 у вигляді окремої бібліотеки. А починаючи з версії Java 1.2, класи Swing (а також усі останні, що входили до JFC) стали повністю інтегрованимимінтегрованимими ву Java.
 
== Архітектура ==
{{Section stub}}
* '''Незалежність від платформи''': Swing  - платформо-незалежна бібліотека, що означає, що програму з використанням Swing можна запустити на всіх платформах, які підтримують [[Віртуальна машина Java|JVM]].
* '''Можливість для розширення''': Swing  - дуже розділенарозподілена архітектура, яка дозволяє «підключати» реалізації користувача вказаної інфраструктури інтерфейсів: користувачі можуть створити свою власну реалізацію цих компонентів, щоб замінити компоненти без обумовлення (''за замовчуванням''). Взагалі, користувачі Swing можуть розширити структуру, продовжуючи (з допомогою ''extendextends'') існуючі класи і/або створюючи альтернативні реалізації основних компонентів.
 
== Приклад ==
наступнийНаступний код - — це основи використання Swing. Ця програма зображує вікно (JFrame).
<source lang="java">
package com.example;
 
// Import theІмпортує swing andі AWT classes neededкласи
import java.awt.EventQueue;
import java.awt.FlowLayout;
Рядок 31:
 
/**
* Простий приклад використання Swing
* Basic Swing example.
*/
public class SwingExample {
public static void main(String[] args) {
// MakeУпевнюємося, sureщо allвсі виклики Swing/AWT invocations are done on theвиконуються Event Dispatch Thread ("EDT")
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Create aСтворюємо JFrame, whichщо isмає aвигляд Windowвікна withз "decorationsдекораціями", i.e.наприклад title,заголовком borderі andкнопкою close-buttonзакриття
JFrame f = new JFrame("SwingПриклад Exampleвікна WindowSwing");
 
// Установлюємо простий менеджер розмітки, що впорядковує всі компоненти
// Set a simple Layout Manager that arranges the contained Components
f.setLayout(new FlowLayout());
 
// AddДодаємо some Componentsкомпоненти
f.add(new JLabel("ThisЦя isкнопка aне buttonробить that does nothingнічого:"));
f.add(new JButton("PressТицяти meсюди!"));
 
// "Пакує" вікно, тобто робить його велечину відповідну до її компонентів
// "Pack" the window, making it "just big enough".
f.pack();
 
// Встановлюємо стандартну операцію закриття для вікна, без цього вікно не закриється після активування кнопки закриття
// Set the default close operation for the window, or else the program won't exit when clicking close button
// (The default isСтандартно HIDE_ON_CLOSE, which just makesщо theпросто windowприховує invisibleвікно)
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
 
// Уснановлюємо видимість=істина, тим самим показуючи вікно на екрані
// Set the visibility as true, thereby displaying it
f.setVisible(true);
}
Рядок 71:
* 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: руководство для начинающих''. &nbsp;— М.: «Вильямс», 2007. &nbsp;— С. 704. &nbsp;— ISBN 0-07-226314-8
* Иван Портянкин: ''Swing: Эффектные пользовательские интерфейсы'', Санкт-Петербург ISBN 5-469-00005-2