Abstract Window Toolkit
![](http://upload.wikimedia.org/wikipedia/commons/4/4c/Easy_Java_AWT_example.jpg)
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". [1]
- 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[2] 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.[3]
Från och med Java 6 Update 12 blev det möjligt att blanda Swing- och AWT-widgets utan dessa problem.[4][5]
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[6], som erbjuder en OpenJDK-baserad Java API för att förenkla AWT-implementation på nya system.[7][8] Projektet har på ett lyckat sätt implementerat AWT widgets genom att använda Java2D.[9] All nödvändig modifiering till JDK-kärnan har sen dess blivit flyttad till OpenJDK 7,[10] 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[11] ä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.[11][12]
Se även
graphic programming in Java på Wikibooks.
Böcker
Referenser
Noter
- ^ oracle.com - java.awt.datatransfer
- ^ oracle.com - canvas class
- ^ Fowler, Amy (1994). ”Mixing heavy and light components”. Sun Microsystems. http://java.sun.com/products/jfc/tsc/articles/mixing/index.html. Läst 17 december 2008.
- ^ Geertjan, Wielenga (16 december 2008). ”A Farewell to Heavyweight/Lightweight Conflicts”. https://dzone.com/articles/a-farewell-heavyweightlightwei. Läst 17 december 2008.
- ^ ”Bug/RFE fixed in current JDK 6u12 build”. Sun Microsystems. 12 december 2008. Arkiverad från originalet den 17 december 2008. https://web.archive.org/web/20081217062847/http://download.java.net/jdk6/6u12/promoted/b02/changes/jdk6uN-b02.html. Läst 17 december 2008.
- ^ Caciocavallo
- ^ Torre, Mario (2 mars 2008). ”FINAL PROPOSAL: Portable GUI backends”. http://mail.openjdk.java.net/pipermail/challenge-discuss/2008-March/000082.html. Läst 7 september 2008.
- ^ Kennke, Roman (18 december 2008). ”Caciocavallo Architecture Overview”. http://rkennke.wordpress.com/2008/12/18/caciocavallo-architecture-overview/. Läst 7 september 2008.
- ^ Kennke, Roman (3 september 2008). ”Cacio Swing AWT peers”. http://rkennke.wordpress.com/2008/09/03/cacio-swing-awt-peers/. Läst 7 september 2008.
- ^ ”How much has been pushed upstream?”. openjdk.java.net. 20 september 2009. http://mail.openjdk.java.net/pipermail/caciocavallo-dev/2009-September/000184.html. Läst 7 mars 2010. ”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.”
- ^ [a b] Kennke, Roman (28 juli 2011). ”JDK7 and Cacio coolness”. http://rkennke.wordpress.com/2011/07/28/jdk7-and-cacio-coolness/. Läst 8 augusti 2011.
- ^ Eisserer, Clemens. ”HTML5/Canvas backend for Caciocavallo (GNU-Classpath)”. Arkiverad från originalet den 10 augusti 2011. https://www.webcitation.org/60p6ELb1M?url=http://www.google-melange.com/gsoc/project/google/gsoc2011/linuxhippy/11001. Läst 8 augusti 2011.
Översättning
- Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Abstract Window Toolkit, 2 december 2012.
Externa länkar
- AWT homepage
- java.awt (AWT Javadoc API documentation)
- Java SE 7