Abstract Window Toolkit

Från Wikipedia
Windowsfönster med några AWT-exempel

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 Environmentmobiltelefoner för att stödja AWT.

Historik[redigera | redigera wikitext]

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[redigera | redigera wikitext]

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:

AWT ger även tillgång några applikationsfunktioner på högre nivå såsom:

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[redigera | redigera wikitext]

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[redigera | redigera wikitext]

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[redigera | redigera wikitext]

Referenser[redigera | redigera wikitext]

Noter[redigera | redigera wikitext]

  1. ^ oracle.com - java.awt.datatransfer
  2. ^ oracle.com - canvas class
  3. ^ 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. 
  4. ^ Geertjan, Wielenga (16 december 2008). ”A Farewell to Heavyweight/Lightweight Conflicts”. https://dzone.com/articles/a-farewell-heavyweightlightwei. Läst 17 december 2008. 
  5. ^ ”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. 
  6. ^ Caciocavallo
  7. ^ 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. 
  8. ^ Kennke, Roman (18 december 2008). ”Caciocavallo Architecture Overview”. http://rkennke.wordpress.com/2008/12/18/caciocavallo-architecture-overview/. Läst 7 september 2008. 
  9. ^ 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. 
  10. ^ ”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. 
  11. ^ [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. 
  12. ^ 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[redigera | redigera wikitext]

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[redigera | redigera wikitext]