Jump to content

Abstract Window Toolkit

Վիքիպեդիայից՝ ազատ հանրագիտարանից
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-ից վերին մակարդակի ծանր քաշային բեռնարկղերի փոխառությունը[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.»

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

[խմբագրել | խմբագրել կոդը]