Windows ձևը AWT որոշ օրինակներով
**Abstract Window Toolkit** (AWT), Java լեզվի գրաֆիկական ինտերֆեյսի (Widget Toolkit) բնօրինակ հարթակից անկախ պատուհանների գրադարանն է։ AWT-ն այժմ Java Foundation Classes-ի (JFC) մի մասն է՝ ստանդարտ API՝ Java ծրագրում GUI-ի ներդրման համար։

AWT-ը նաև ստանդարտ GUI գրադարան է Java ME որոշ պրոֆիլների համար։ Օրինակ, Միացված սարքի կազմաձևման պրոֆիլները պահանջում են Java-ի գործարկման ժամանակը բջջային հեռախոսներում՝ AWT-ին աջակցելու համար։

Պատմությումն
------------

Երբ 1995 թվականին Sun Microsystems-ը առաջին անգամ թողարկեց Java-ն, AWT վիդջեթները աբստրակցիայի բարակ շերտ էին ապահովում հիմնական նեյթիվ ինտերֆեյսի վրա։ Օրինակ, AWT վանդակի ստեղծումը հանգեցնում է նրան, որ AWT-ն ուղղակիորեն կանչում է ավելի ցածր մակարդակի տեղական ենթածրագր, որը ստեղծում է վանդակը։ Այնուամենայնիվ, Microsoft Windows-ի վանդակը նույնը չէ, ինչ վանդակը Mac OS-ի կամ Unix-ի տարբեր համերի վրա։ Որոշ մշակողներ նախընտրում են այս մոդելը, քանի որ այն ապահովում է համապատասխանության բարձր աստիճան հիմնական պատուհանների գործիքակազմի հետ և անխափան ինտեգրում նեյթիվ հավելվածներին։ Այլ կերպ ասած, AWT-ի միջոցով գրված GUI ծրագիրը Windows-ով աշխատելիս նման է Microsoft Windows-ի նեյթիվ հավելվածին, և միևնույն ժամանակ նման է բնօրինակ Apple Macintosh հավելվածին, երբ աշխատում է Mac-ով և այլն, այնուամենայնիվ, որոշ մշակողներ չեն սիրում այս մոդելը, քանի որ նրանք նախընտրում են, որ իրենց հավելվածները բոլոր հարթակներում նույն տեսքը ունենան։

J2SE 1.2-ում AWT վիջեթները հիմնականում փոխարինվել են Swing-ի վիջեթներով։ Օգտվողի միջերեսի տարրերի ավելի հարուստ հավաքածու տրամադրելուց բացի, Swing-ը նկարում է իր սեփական վիջեթները (օգտագործելով Java 2D՝ տեղական գրաֆիկական ցածր մակարդակի ենթահամակարգի ռեժիմներ կանչելու համար)՝ օպերացիոն համակարգի բարձր մակարդակի ինտերֆեյսի մոդուլին ապավինելու փոխարեն։ Swing-ը հնարավորություն է տալիս օգտագործել կամ «look and fell» համակարգ, որն օգտագործում է հարթակի նեյթիվ «look and fell», կամ միջպլատֆորմային տեսքն ու զգացումը («Java Look and Feel»), որը նույն տեսքն ունի բոլոր հարթակներում։ Այնուամենայնիվ, Swing-ն օգտագործում է AWT-ն՝ նեյթիվ պատուհանների համակարգի հետ փոխգործակցության համար։

Ճարտարապետություն
-----------------

**AWT-ն** ապահովում է API-ի երկու մակարդակ.

* Ընդհանուր ինտերֆեյս Java-ի և նեյթիվ համակարգի միջև, որն օգտագործվում է պատուհանների, իրադարձությունների, դասավորության կառավարիչների կառավարման համար։ Այս API-ն Java GUI ծրագրավորման հիմքն է և օգտագործվում է նաև Swing-ի և Java 2D-ի կողմից։ Նա պարունակում է.
	+ Ինտերֆեյս նեյթիվ պատուհանային համակարգի և Java հավելվածի միջև,
	+ Ինտերֆեյսի իրադարձությունների մշակման միջուկ,
	+ Դասավորության որոշ կառավարիչներ,
	+ Ինտերֆեյս մուտքային սարքերի համար, ինչպիսիք են մկնիկը և ստեղնաշարը և
	+ `java.awt.datatransfer փաթեթը՝` սեղմատախտակի և Drag and Drop-ի հետ օգտագործելու համար։
* GUI վիջեթների հիմնական հավաքածու, ինչպիսիք են կոճակները, տեքստային տուփերը (text box) և ընտրացանկերը։ Այն նաև տրամադրում է AWT Native ինտերֆեյս, որը թույլ է տալիս տեղական ծածկագրով գրադարաններին ուղղակիորեն նկարել կտավի վրա։

AWT-ն նաև տրամադրում է հավելվածներ որոշ բարձր մակարդակի ֆունկցիոնալությամբ.

* Աջակցվող համակարգերի ծանուցման տարածք մուտք գործելը և
* Որոշ աշխատասեղանի հավելվածներ գործարկելու ունակություն, ինչպիսիք են վեբ բրաուզերները և էլփոստի սպասառուներ Java հավելվածից։

Ո՛չ AWT-ն, ո՛չ Swing-ը բնականաբար անվտանգ չեն թելերի վրա։ Այսպիսով, կոդը, որը թարմացնում է GUI-ը կամ մշակում իրադարձությունները, պետք է կատարվի իրադարձությունների դիսպետչերական շղթայի վրա[en] (անգլ.՝ *event dispatching thread, EDT*)։ Դա չկատարելը կարող է հանգեցնել փակուղու կամ մրցավազքի վիճակի։ Այս խնդիրը լուծելու համար`SwingWorker` դասը թույլ է տալիս հավելվածներին գործարկել «ծանր» ինտերֆեյսի իրադարձությունների մշակիչներ իրադարձությունների մշակման շղթայում։

AWT և Swing բաղադրիչների խառնուրդ
---------------------------------

Սկսած Java 6#Java SE 6 Update 10-ից, Swing բաղադրիչների և հիմնական AWT վիջեթների խառնումը հաճախ ունենում էր անցանկալի կողմնակի ազդեցություններ, ընդ որում AWT վիդջեթները հայտնվում էին Swing վիդջեթների վերևում՝ անկախ դրանց հատուկ դասավորության կարգից։ Այս խնդիրը պայմանավորված է նրանով, որ երկու վիդջեթների գործիքակազմերի մատուցման ճարտարապետությունը շատ տարբեր է, չնայած Swing-ի կողմից AWT-ից վերին մակարդակի ծանր քաշային բեռնարկղերի փոխառությունը։

Java 6#Java SE 6 Update 12-ից սկսած՝ հնարավոր է խառնել Swing և AWT վիջեթները՝ առանց պատվերի հետ կապված խնդիրների։

Իրականացում
-----------

Քանի որ AWT-ն կամուրջ է դեպի հիմքում ընկած նեյթիվ օգտատիրոջ միջերեսը, դրա ներդրումը նոր օպերացիոն համակարգում կարող է մեծ աշխատանք լինել, հիմնականում մի շարք վիջեթների համար, որոնք պահանջում են նեյթիվ հասակակիցների մշակումը զրոյից յուրաքանչյուր AWT վիդջեթի համար։

Java-ի զարգացմանը զուգահեռ սկսեց մշակվել Caciocavallo նախագիծը։ Դրա նպատակն է տրամադրել Java API-ներ, որոնք հիմնված են OpenJDK-ի վրա՝ հեշտացնելու համար նոր օպերացիոն համակարգերի համար AWT-ի ներդրումը գրելը։ Java2D-ն օգտագործվում է ինտերֆեյսի կառուցման համար։ Բոլոր անհրաժեշտ փոփոխությունները ներառված են JDK-ում OpenJDK 7-ից սկսած։

Տես նաև
-------

* Swing

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

1. ↑  Fowler, Amy (1994). "Mixing heavy and light components". Sun Microsystems. Արխիվացված է the original 2012 թ․ մայիսի 1-ին. Retrieved 2008 թ․ դեկտեմբերի 17.
2. ↑  Torre, Mario (2008 թ․ մարտի 2). "FINAL PROPOSAL: Portable GUI backends". Արխիվացված է the original 2012 թ․ մայիսի 1-ին. Retrieved 2008 թ․ սեպտեմբերի 7.
3. ↑  Kennke, Roman (2008 թ․ սեպտեմբերի 3). "Cacio Swing AWT peers". Արխիվացված է the original 2013 թ․ ապրիլի 29-ին. Retrieved 2013 թ․ ապրիլի 21. `{{cite web}}`: Cite has empty unknown parameter: `|deadlink=` (help)
4. ↑  "How much has been pushed upstream?". openjdk.java.net. 2009 թ․ սեպտեմբերի 20. Արխիվացված է the original 2012 թ․ մայիսի 1-ին. Retrieved 2010 թ․ մարտի 7. *You don't need anymore those patches, with the latest FontManager push, everything is upstream now, so just use the Cacio repo, it's completely self contained.*

Արտաքին հղումներ
----------------

* AWT homepage
* Կաղապար:Javadoc:SE (AWT Javadoc API documentation)