Hoppa till innehållet

Abstract Window Toolkit

Från Wikipedia
Version från den 20 januari 2013 kl. 18.11 av Sjundebot (Diskussion | Bidrag) (Implementation: clean up, , rättningar:synnerlighet → synnerhet med AWB)
Windowsfönster med några AWT-exempel

Abstract Window Toolkit (AWT) är Java's ursprungliga plattforms-oberoende fönstersystem, grafik, gränssnitt och widgetverktygslåda. AWT är nu en del av Java Foundation Classes(enwp) (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(enwp) profiler Java Runtime Environmentmobiltelefoner för att stödja AWT.

Historik

När Sun Microsystems släppte Java i 1995, erbjöd AWT widgets ett tunt abstraktions-lag ö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. Fast en kryssruta på Microsoft Windows är inte identisk med en kryssruta på Mac OS eller olika varianter av Unix. Vissa utvecklare föredrar denna modellen eftersom det ger en närhet och likhet till det underliggande GUI'et samt likhet till "lokala" applikationer. Kort sagt, ett GUI-program skriven med AWT ser ut som en vanlig Microsoft Windows - applikation när det körs i Windows och samma program ser ut som ett vanligt Apple Macintosh - applikation när det körs på en Mac, osv. Vissa utvecklare ogillar denna modellen och föredrar att deras applikationer ser identiska ut oberoende av platform.

I J2SE 1.2 så ersatte Swing(enwp) verktygslåda stort sett AWT's widgets. Förutom att erbjuda en större uppsättning av UI widgets, Swing ritar upp sina egna widgets (genom att använda Java 2D(enwp) 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-objekter 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:

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(enwp) måste kod som uppdaterar GUI eller prosesshändelser köras på händelsetråden(enwp). Gör man inte detta så riskerar man att programmet går i baklås eller race condition(enwp). För att ta tag i detta problemet låter en utility class(enwp) kallad SwingWorker(enwp) applikationer att utföra tidsödande uppgifter orsakad 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 at AWT-widgets hamnade över Swing-widgets oberoende av vad som var inställt. Detta kom av att de två bibliotekens metoder för att rita skiljer sig mycket, trots att Swing lånar den översta kontainern (enwp) från AWT.[3]

Från och med Java 6 Update 12 blev det möjligt att blanda Swing och AWT widgets utan att ha dessa problem.[4][5]

Implementation

Eftersom AWT är en bro till det underliggande användaggrä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 dens lokala motsvarighet utvecklas från botten.

Det har startats ett nytt projekt, Caciocavallo, som erbjuder en OpenJDK-baserad(enwp) Java API för att föränkla AWT implementation på nya systemer.[6][7] Projektet har på ett lyckat sätt implementerat AWT widgets genom att använda Java2D(enwp).[8] All nödvändig modifiering till JDK-kärnan har blivit sen dess blivit flyttad till OpenJDK 7,[9] 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[10] ä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 webapplikationer på en webserver.[10][11]

Se också

graphic programming in Java på Wikibooks.

Källor

Översatt

Den här artikeln är helt eller delvis baserad på material från engelskspråkiga Wikipedia, Abstract Window Toolkit, 2 december 2012.

Referenser

  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). one.com/news/a-farewell-heavyweightlightwei ”A Farewell to Heavyweight/Lightweight Conflicts”. http://java.dz one.com/news/a-farewell-heavyweightlightwei. Läst 17 december 2008. 
  5. ^ ”Bug/RFE fixed in current JDK 6u12 build”. Sun Microsystems. 12 december 2008. http://download.java.net/jdk6/6u12/promoted/b02/changes/jdk6uN-b02.html. Läst 17 december 2008. 
  6. ^ 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. 
  7. ^ Kennke, Roman (18 december 2008). ”Caciocavallo Architecture Overview”. http://rkennke.wordpress.com/2008/12/18/caciocavallo-architecture-overview/. Läst 7 september 2008. 
  8. ^ 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. 
  9. ^ ”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. 
  10. ^ [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. 
  11. ^ Eisserer, Clemens. ”HTML5/Canvas backend for Caciocavallo (GNU-Classpath)”. Arkiverad från originalet den 10 augusti 2011. http://www.webcitation.org/1312943154337056. Läst 8 augusti 2011. Okänd parameter 1

Eksterna länkar