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

Windows ձևը AWT որոշ օրինակներով

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-ից վերին մակարդակի ծանր քաշային բեռնարկղերի փոխառությունը[1]։

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

Իրականացում խմբագրել

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

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

Տես նաև խմբագրել

Ծանոթագրություններ խմբագրել

  1. Fowler, Amy (1994). «Mixing heavy and light components». Sun Microsystems. Արխիվացված է օրիգինալից 2012 թ․ մայիսի 1-ին. Վերցված է 2008 թ․ դեկտեմբերի 17-ին.
  2. Torre, Mario (2008 թ․ մարտի 2). «FINAL PROPOSAL: Portable GUI backends». Արխիվացված է օրիգինալից 2012 թ․ մայիսի 1-ին. Վերցված է 2008 թ․ սեպտեմբերի 7-ին.
  3. Kennke, Roman (2008 թ․ սեպտեմբերի 3). «Cacio Swing AWT peers». Արխիվացված է օրիգինալից 2013 թ․ ապրիլի 29-ին. Վերցված է 2013 թ․ ապրիլի 21-ին.
  4. «How much has been pushed upstream?». openjdk.java.net. 2009 թ․ սեպտեմբերի 20. Արխիվացված է օրիգինալից 2012 թ․ մայիսի 1-ին. Վերցված է 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.»

Արտաքին հղումներ խմբագրել