Abstract Window Toolkit

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


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


== Արտաքին հղումներ ==
AWT homepage
Կաղապար:Javadoc:SE (AWT Javadoc API documentation)