Abstract Window Toolkit

Abstract Window Toolkit (AWT) är Javas ursprungliga plattforms-oberoende fönstersystem, grafik, gränssnitt och widgetverktygslåda. AWT är nu en del av Java Foundation Classes (JFC) — Javas standard-API för skapandet av grafiska användargränssnitt (GUI).

AWT är också GUI-verktygslåda för ett flertal av Java ME profiler. Till exempel kräver Connected Device Configuration profiler Java Runtime Environment på mobiltelefoner för att stödja AWT.

Historik 
När Sun Microsystems släppte Java år 1995, erbjöd AWT widgets ett tunt abstraktionslager över det underliggande systemet. Till exempel, en AWT-kryssruta fick AWT till att anropa det underliggande systemets subrutiner direkt vilket i sin tur skapade kryssrutan. En kryssruta på Microsoft Windows är dock inte identisk med en kryssruta på Mac OS Classic eller olika varianter av Unix. Vissa utvecklare föredrar denna modell eftersom det ger en närhet och likhet till det underliggande GUI:et samt likhet till "lokala" applikationer. Kort sagt, ett GUI-program skrivet med AWT ser ut som en vanlig Microsoft Windows-applikation när det körs i Windows och samma program ser ut som en vanlig Apple Macintosh-applikation när det körs på en Mac, osv. Vissa utvecklare ogillar denna modell och föredrar att utseendet på deras applikationer är oberoende av plattform.

I J2SE 1.2 ersatte Swings verktygslåda i stort sett AWT:s widgets. Förutom att erbjuda en större uppsättning av UI-widgets, ritar Swing upp sina egna widgets (genom att använda Java 2D för att anropa maskinnära subrutiner i det lokala grafiska systemet) istället för att använda OS:ets högre UI-rutiner. Swing erbjuder möjligheten att använda antingen ett UI liknande det lokala, vilket använder det lokala OS:ets utseende, eller ett plattformsoberoende utseende och ser likadant ut på alla system.

Abstract Window Toolkit (AWT) är en uppsättning av API:er som användes av Javaprogrammerare för att skapa GUI-objekt såsom knappar, "scroll bars" och fönster. AWT är en del av Java Foundation Classes (JFC) från Sun Microsystems, företaget som skapade Java. JFC är en omfattande uppsättning av GUI-klassbibliotek som gör det lättare att skapa användargränssnitten till applikationer.

Arkitektur 
AWT erbjuder två nivåer av API:
 Ett allmänt gränssnitt mellan Java och det lokala systemet, används för fönstersystem, händelser, och layouthanterare. Detta API är i kärnan av Java GUI-programmering och är även använt av Swing and Java 2D. Det innehåller:
 Gränssnittet mellan det lokala fönstersystemet och Javaapplikationen.
 Kärnan i det grafiska händelsedrivna systemet.
 Ett flertal layouthanterare.
 Gränssnittet till indataenheter såsom möss och tangentbord.
 Javapaketet java.awt.datatransfer som används med urklippshanteraren och "klicka och dra". 

 En grundläggande uppsättning av GUI-widgets såsom knappar, textboxar och menyer. Det ger också tillgång till AWT Native Interface, vilket möjliggör renderings bibliotek kompilerad till maskinkod för att rita direkt till ett AWT Canvas objekts skrivyta.

AWT ger även tillgång några applikationsfunktioner på högre nivå såsom:
 Tillgång till aktivitetsfältet på stödjande system.
 Möjligheten att starta några skrivbordsapplikationer såsom webbläsare och e-postklienter från en Javaapplikation.

Eftersom vare sig AWT eller Swing är helt trådsäkert måste kod som uppdaterar GUI eller processhändelser köras på händelsetråden. Gör man inte detta riskerar man att programmet går i baklås eller race condition. För att ta tag i detta problem låter en utility class kallad SwingWorker applikationer utföra tidsödande uppgifter orsakade av "användargränssnitts-händelser" i händelsetråden.

Blanda AWT- och Swing-komponenter 
Före Java 6 Update 12 kunde det orsaka oönskade "biverkningar" av att blanda Swing-komponenter och vanliga AWT-widgets såsom att AWT-widgets hamnade över Swing-widgets oberoende av vad som var inställt. Detta kom sig av att de två bibliotekens metoder för att rita skiljer sig åt mycket, trots att Swing lånar den översta containern från AWT.

Från och med Java 6 Update 12 blev det möjligt att blanda Swing- och AWT-widgets utan dessa problem.

Implementation 
Eftersom AWT är en bro till det underliggande användargränssnittet kan implementationen till ett nytt OS bli arbetskrävande, i synnerhet om det inkluderar någon AWT GUI-widget, eftersom varje sådan kräver att dess lokala motsvarighet utvecklas från botten.

Det har startats ett nytt projekt Caciocavallo, som erbjuder en OpenJDK-baserad Java API för att förenkla AWT-implementation på nya system. Projektet har på ett lyckat sätt implementerat AWT widgets genom att använda Java2D. All nödvändig modifiering till JDK-kärnan har sen dess blivit flyttad till OpenJDK 7, vilket betyder att Java numera kan användas med annan grafisk stack än de som erbjuds av officiell JDK (X Window System, OpenGL eller DirectX) genom att inkludera ett externt bibliotek och sätta några systeminställningar. DirectFB stöd  för Caciocavallo är under utveckling, det samma gäller stöd  för HTML5. Målet är att få  existerande Swing applikationer — utan Java support — att köra som vanliga webbapplikationer på en webbserver.

Se även

Referenser

Noter

Översättning

Externa länkar 
 AWT homepage
 java.awt (AWT Javadoc API documentation)
 Java SE 7

Programspråket Java