Swing

Swing` գրադարան Java ծրագրերի համար գրաֆիկական ինտերֆեյս ստեղծելու համար։ Swing-ը մշակվել է Sun Microsystems-ի կողմից։ Այն պարունակում է մի շարք գրաֆիկական բաղադրիչներ (անգլ.՝ Swing widgets), ինչպիսիք են կոճակները, մուտքագրման դաշտերը, աղյուսակները և այլն։
Swing-ը վերաբերում է JFC դասի գրադարանին, որը գրադարանների հավաքածու է GUI-ների մշակման համար։ Այս գրադարանները ներառում են Java 2D, Accessibility-API, Drag & Drop-API և AWT:


== Պատմություն ==
Java 1.2-ից սկսած (1998) Swing տարբերակը ներառվել է Java Runtime Environment-ում։


== Ճարտարապետություն ==
Look and FeelSwing ճարտարապետությունը նախագծված է այնպես, որ դուք կարողանաք փոխել ձեր հավելվածի «Look and Feel»-ը (L&F): «Look»-ը որոշում է բաղադրիչների արտաքին տեսքը, իսկ «Feel»-ը՝ նրանց վարքագիծը։ Sun's JRE-ն տրամադրում է հետևյալ L&F-ները։

CrossPlatformLookAndFeel, այն տեղական L&F-ն է Java հավելվածների համար (նաև կոչվում է Metal): Այն օգտագործվում է լռելյայնորեն՝ ապահովելով բաղադրիչների ստանդարտ վարքագիծը և դրանց տեսքը՝ անկախ այն հարթակից, որում աշխատում է հավելվածը։
SystemLookAndFeel, այս դեպքում հավելվածն օգտագործում է L&F, որը բնիկ է այն համակարգի համար, որի վրա գործում է հավելվածը։ L&F համակարգը որոշվում է գործարկման ժամանակ։ Windows-ի համար օգտագործվում է «Windows» L&F-ը, որը ընդօրինակում է կոնկրետ համակարգի առանձնահատկությունները, որոնց վրա աշխատում է՝ դասական Windows, XP կամ Vista: Linux-ի և Solaris-ի համար «GTK»-ն օգտագործվում է, եթե տեղադրված է GTK 2.2 կամ ավելի նոր տարբերակ, հակառակ դեպքում՝ «Motif»:
Synth, հիմք ստեղծելու ձեր սեփական L&F-ները։
Multiplexing,  ապահովում է միաժամանակ տարբեր L&F-ներ օգտագործելու հնարավորություն։


== Համեմատություն AWT-ի հետ ==
Swing-ն ապահովում է ավելի ճկուն ինտերֆեյսի բաղադրիչներ, քան նախկին AWT գրադարանը։ Ի տարբերություն AWT-ի, Swing բաղադրիչները նախագծված են նույն կերպ աշխատելու հարթակներում, մինչդեռ AWT բաղադրիչները հետևում են գործարկվող պլատֆորմի միջերեսին առանց փոփոխությունների։ Մյուս կողմից, AWT-ն օգտագործում է միայն ստանդարտ ՕՀ-ի տարրեր ցուցադրման համար, այսինքն՝ յուրաքանչյուր տարրի համար ստեղծվում է առանձին ՕՀ օբյեկտ (պատուհան), և հետևաբար AWT-ն թույլ չի տալիս ստեղծել կամայական ձևի տարրեր (հնարավոր է օգտագործել միայն ուղղանկյուն բաղադրիչներ), AWT-ի վրա հիմնված հսկիչները միշտ ցուցադրվում են Swing տարրերի վերևում (քանի որ Swing-ի բոլոր բաղադրիչները ցուցադրվում են տարայի մակերեսին)։
Swing բաղադրիչները աջակցում են հատուկ plugable look-and-feel (անգլ.՝ plugable look-and-feel), որի շնորհիվ հնարավոր է հարմարվել հարթակի գրաֆիկական ինտերֆեյսին (այսինքն՝ օպերացիոն համակարգին հատուկ մեկ այլը կարող է լինել. դինամիկ միացված բաղադրիչին, ներառյալ ծրագրավորողի տեսքը և վարքագիծը ստեղծվածը)։ Այսպիսով, Swing-ն օգտագործող հավելվածները կարող են նմանվել այդ օպերացիոն համակարգի բնիկ հավելվածներին։ Նման «թեթև» (անգլ.՝  Lightweight) բաղադրիչների հիմնական թերությունը նրանց համեմատաբար դանդաղ աշխատանքն է։ Դրական կողմը ստեղծված հավելվածների ինտերֆեյսի ունիվերսալությունն է բոլոր հարթակներում։


=== Lightweight սկզբունք ===
«Lightweight» նշանակում է, որ Swing բաղադրիչները գծվում են հենց բաղադրիչների կողմից մայր պատուհանի մակերեսի վրա՝ առանց օպերացիոն համակարգի բաղադրիչների օգտագործման։ Ի տարբերություն «ծանր» AWT բաղադրիչների՝ Swing հավելվածը կարող է ունենալ միայն մեկ պատուհան, իսկ մնացած բոլոր բաղադրիչները գծված են մոտակա մայրիկի վրա, որն ունի իր սեփական պատուհանը (օրինակ՝ JFrame): Հնարավոր է, որ հավելվածը խառնի Swing և AWT տարրերը, չնայած դա կարող է առաջացնել որոշ խնդիրներ. մասնավորապես, AWT բաղադրիչները միշտ համընկնում են Swing տարրերի վրա, ինչպես նաև ծածկում են JPopupMenu և JComboBox թռուցիկ ընտրացանկերը։ Դա կանխելու համար այս բաղադրիչներն ունեն setLightWeightPopupEnabled(boolean) մեթոդներ՝ անջատելու թեթև թռուցիկ տարրերի օգտագործումը։ Սահմանելով հատկությունը true (setLightWeightPopupEnabled(true)) AWT տարրերը չեն համընկնի ցանկի հետ։


== SWT-ի հետ համեմատություն ==
The Standard Widget Toolkit-ը (SWT) մրցակցային գործիքակազմ է, որն ի սկզբանե մշակվել է IBM-ի կողմից և այժմ պահպանվում է Eclipse կազմակերպության կողմից։ SWT-ի ներդրումն ավելի շատ ընդհանրություններ ունի AWT-ի ծանր քաշային բաղադրիչների հետ։ Սա տալիս է առավելություններ, ինչպիսիք են ավելի ճշգրիտ հավատարմությունը հիմքում ընկած բնապատկերային պատուհանների գործիքակազմի հետ՝ ծրագրավորման մոդելում տեղական հարթակի ավելի մեծ ազդեցության գնով։
Եղել են զգալի բանավեճեր և շահարկումներ SWT-ի և Swing-ի արդյունավետության վերաբերյալ. ոմանք ակնարկել են, որ SWT-ի մեծ կախվածությունը JNI-ից կդանդաղեցնի այն, երբ GUI բաղադրիչը և Java-ն պետք է հաղորդակցեն տվյալները, բայց ավելի արագ՝ երբ տվյալների մոդելը բեռնված է GUI-ում, բայց դա ոչ մի կերպ չի հաստատվել։ 2005-ին չափորոշիչների բավականին մանրակրկիտ փաթեթը եզրակացրեց, որ ոչ Swing-ը, ոչ էլ SWT-ն ակնհայտորեն չեն գերազանցում մյուսներին ընդհանուր դեպքում։


== Օրինակներ ==
«Hello World» օգտագործելով Swing.Ինտերֆեյսի տեսքի փոփոխություն՝ օգտագործելով Look-and-Feel.Օգտագործելով համակարգի Look-And-Feel-ը


== Արտաքին հղումներ ==
Введение в Swing (ռուս.)  [недоступно]
JDK 6 Swing APIs & Developer Guides — from Oracle Coorp (անգլ.)
Creating a GUI with JFC/Swing: Examples (անգլ.)
A Swing Architecture Overview (անգլ.)
Swing Sightings: список приложений на Swing (անգլ.)


== Ծանոթագրություններ ==


== Գրականություն ==
Иван Портянкин Swing: Эффектные пользовательские интерфейсы, 2-е издание. — 2-е. — Санкт-Петербург: «Лори», 2011. — 600 с. — ISBN 978-5-85582-305-9
Герберт Шилдт SWING: руководство для начинающих = SWING: A BEGINNER'S GUIDE. — М.: «Вильямс», 2007. — 704 с. — ISBN 0-07-226314-8