Swing (Java)

De Widgets av swing med Ocean utseendet (standard siden Java 1.5)
Klassehierarki av AWT og Swing

Swing er et GUI-verktøy for Java- programmeringsspråket fra Sun Microsystems . Siden Java versjon 1.2 (1998) har den vært en del av Java-kjøretiden. Swing er en av Java Foundation Classes (JFC), som gir en samling biblioteker for programmering av grafiske brukergrensesnitt. Disse bibliotekene inkluderer Java 2D , Java Accessibility API (JAAPI), dra-og-slipp- API og Abstract Window Toolkit (AWT). Swing bygger på den eldre AWT og er sammenvevd med de andre API-ene.

Swings hovedkonkurrent er SWT utviklet for Eclipse . Den utpekte etterfølgeren til Swing er JavaFX- rammeverket , som har blitt inkludert i leveransen av Oracle JDK siden mars 2014, men som ennå ikke er spesifisert som en offisiell Java-standard av Java Community Process .

kjennetegn

konstruksjon

Swing har en modulær og objektorientert struktur slik at den er spesielt egnet for utvikling av komplekse applikasjoner. Plattformuavhengigheten betyr også at mye utvikling og testarbeid ikke lenger er nødvendig.

Pluggbart utseende

Utseendet ( se , se hud ) og oppførselen ( følelsen ) til svingkomponenter kan justeres ved hjelp av såkalt look-and-feel . Både motivets utseende og metallutseendet (fra Java 5 havets utseende) er tilgjengelig på alle plattformer , og på Linux Gtk, Mac og Windows er det et ekstra systemtilpasset eget utseende. Det er en rekke uavhengig utviklede fremtoninger, hvorav de fleste er metallbaserte. Synth-utseendet og -følelsen har blitt lagt til siden Java 1.5, hvis utseende består av bilder og er beskrevet i en XML-fil slik at ingen Java-kode må skrives. Med Java 1.6, Update 10, ble det helt vektorbaserte Nimbus-utseendet introdusert.

Lette komponenter

Svingkomponenter gjengis direkte av Java og avhenger ikke av innfødte operativsystemkomponenter. Dette betyr at alle Swing-komponenter fungerer på samme måte på alle plattformer, uansett om den tilsvarende plattformen gir en komponent eller ikke. Ulempen er at et Swing-program ikke ser ut som et program designet for operativsystemet. Dette kan imidlertid kompenseres med et utvalg av passende pluggbar utseende. Denne egenskapen er beskrevet av det engelske ordet Lightweight UI (lightweight = all-Java language).

sammenligning

Sammenlignet med AWT har Swing følgende tilleggskomponenter som kan brukes til å lage overflater:

Multithreading

Sving er ikke trådsikkert , så uventede interaksjoner mellom forskjellige tråder kan oppstå hvis de ikke programmeres nøye. I stedet blir de Swing komponenter implementert på en slik måte at deres metoder alltid må utføres i en såkalt hendelses Dispatch tråden fra den AWT , som utfører hele arrangementet behandlingen av grafisk interaktive Java-programmer. For å forenkle dette gir hjelperklassen SwingUtilitiesto metoder som kan kalles fra andre tråder og tar et kjørbart objekt av typen Runnablesom parameter.

  • invokeLatersetter det kjørbare objektet i AWT-hendelseskøen og går tilbake til ringekoden før den kjøres. Så ringetråden er ikke blokkert.
  • invokeAndWaitsetter det kjørbare objektet i AWT-hendelseskøen og venter til det er behandlet. Ringetråden er blokkert.

Brudd på disse konvensjonene rapporteres ikke til programmereren, slik at tilknyttede vanskeligheter forblir uoppdaget i lang tid eller ikke løses i det hele tatt. UI-rammer som SWT eller .NET WinForms håndterer dette annerledes og anerkjenner feil samtaler umiddelbart.

Utenfor JRE ga Sun en basisklasse kalt SwingWorker , som tilbyr to metoder som skal overbelastes: En som kalles i en egen tråd og kan utføre en langvarig operasjon, og en annen som utføres i tilfelle sendetråden etter at denne operasjonen har avsluttet og manipulere svingkomponenter. Det er også en mekanisme som gjør det mulig å visualisere mellomtrinn (f.eks. I en fremdriftsvisning). Siden Java 1.6 har den blitt inkludert i JRE som javax.swing.SwingWorker.

historie

Swing ble først levert som et eksternt bibliotek med JDK 1.1.5 i slutten av 1997 og har vært en integrert del av Java runtime-miljøet siden JDK 1.2 ("Java 2") i slutten av 1998. Swing hadde snart rykte for dårlig ytelse og uegnet for "seriøse" applikasjoner. Standard stil ( utseende og følelse ) av svingvinduer fant heller ikke mange venner.

Sun la da stor vekt på å forbedre utseendet til det medfølgende Look and Feels , samt ytelsen til Swing. I mellomtiden har ytelsen forbedret seg betydelig gjennom forbedret maskinvarestøtte for akselerasjonsfunksjonene til grafikkort, samt gjennom ytelsesforbedringer i klassebibliotekene selv og i Java Runtime. Siden Java-versjon 1.4 senest 2002, har ikke Swing vist noen merkbare ytelsesforskjeller til innfødte GUIer. Ytelsessammenligning mellom Swing og SWT viser heller ingen forskjeller i ytelse.

eksempel

Hello World-programmet er gitt her som et eksempel på en Swing-søknad :

import javax.swing.*;

public class HelloWorldSwing {
    public static void main(String[] args) {
        // Verpacke den auszuführenden Quellcode in ein eigenes
        // Runnable-Objekt, um diesen nachher im Event Dispatching
        // Thread ausführen zu können
        Runnable guiCreator = new Runnable() {
            public void run() {
                // Erstellt das Swing-Fenster
                JFrame fenster = new JFrame("Hallo Welt mit Swing");
                // Swing anweisen, das Programm zu beenden, wenn das Fenster
                // geschlossen wird
                fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                // Fügt den "Hallo Welt"-Text hinzu
                JLabel label = new JLabel("Hallo Welt");
                fenster.add(label);

                // Zeigt das Fenster an
                fenster.setSize(300, 200);
                fenster.setVisible(true);
            }
        };

        // Führe den obigen Quellcode im Event-Dispatch-Thread aus
        SwingUtilities.invokeLater(guiCreator);
    }
}

Deler av denne kildekoden utføres av forskjellige tråder . Tråden som utfører hovedmetoden er vanligvis ikke hendelsesforsendelsetråden (EDT). Imidlertid bør svingkomponenter vanligvis bare opprettes og endres av EDT (med mindre dokumentasjonen uttrykkelig sier noe annet). Kildekoden for GUI er derfor pakket i sitt eget kjørbare objekt. Tråden som utfører hovedmetoden , oppretter bare det kjørbare objektet og instruerer Swing om å utføre denne kildekoden senere i EDT.

Utvidelser

Swing kan utvides på forskjellige punkter ved hjelp av plug-in-konseptet innebygd i Swing. Typiske utvidelser er relatert til Look & Feels, layoutadministratorer og andre komponenter.

SUN open source-prosjektet SwingLabs tilbyr en rekke utvidelser for Swing og fungerer som et testmiljø for fremtidige utvidelser av Swing. Blant annet var klassene GroupLayout, SystemTray og Desktop, som ble introdusert i Java 6, vert i SwingLabs. Ytterligere utvidelser samles av java.net Java Desktop Community i Java Desktop Swing Depot. JGoodies av Karsten Lentzsch tilbyr også en rekke svingforlengelser, for eksempel FormLayout.

Spring Richclient- prosjektet tilbyr en integrering av Swing i Spring Framework. Imidlertid har den ikke blitt videreutviklet siden midten av 2009.

Svingredaktører

Det finnes en rekke mest betalte WYSIWYG GUI designverktøy for Swing. Følgende er de mest populære:

  • JFormDesigner - Kommersiell redaktør, både frittstående og som Eclipse, IntelliJ-IDEA og JBuilder plug-in
  • Jigloo - Commercial Eclipse plugin for Swing og SWT GUI, gratis for ikke-kommersiell bruk
  • Window Builder Pro - Tidligere kommersiell Eclipse-plugin for Swing, SWT og GWT GUI, konverteres for øyeblikket til et Eclipse-prosjekt.
  • Matisse4MyEclipse - Port of Matisse , GUI-byggeren til NetBeans IDE , for Eclipse and Swing, kjører bare under MyEclipse
  • Visual Editor - Open Source Eclipse Plugin for Swing og SWT GUI (det tilknyttede utviklingsprosjektet har ikke vært aktivt siden april 2012)

litteratur

  • Tyskspråklige bøker:
    • David Geary: Grafisk Java 2.0 Volume II. Mastering the JFC (Swing). 3. utgave. Markt + Technik, 15. november 1999, ISBN 3-8272-9590-4 (oversettelse av den engelske originalen)
    • David Geary: Grafisk Java 2.0. Mestre JFC (AWT). 3. utgave. Markt + Technik, 15. juli 1999, ISBN 3-8272-9585-8 (oversettelse av den engelske originalen)
    • Paul Fischer: Grafisk programmering med Java Swing. Addison-Wesley, 15. september 2001, ISBN 3-8273-1910-2
  • Engelskspråklige bøker:
    • Marc Loy, Robert Eckstein, Dave Wood: Java Swing. 2. utgave. O'Reilly, november 2002, ISBN 0-596-00408-7
    • Kathy Walrath, Mary Campione, Alison Huml: JFC Swing Tutorial. 2. utgave. Addison-Wesley Professional, februar 2004, ISBN 0-201-91467-0 (referanse)
    • Kim Topley: Core Swing Advanced Advanced Programming. Prentice Hall, 2000, ISBN 0-13-083292-8
    • Kim Topley: Core, Java Foundation Classes. Prentice Hall, 1998, ISBN 0-13-080301-4
    • David M. Geary: Mastering the JFC - Volume II Swing. 3. utgave. Prentice Hall PTR, 1998, ISBN 0-13-079667-0 (referanse)
    • David M. Geary: Mastering the JFC - Volume I AWT. 3. utgave. Prentice Hall PTR, 1999, ISBN 0-13-079666-2 (referanse)

weblenker

Wikibooks: Java Standard: Grafiske grensesnitt med Swing  - lærings- og undervisningsmateriell

Individuelle bevis

  1. Svingforbedringer i Java Standard Edition 6.0 og SE 6 Update 10 Release NotesOracle
  2. Christian Ullenboom: Swing er ikke trådsikre . ( online [åpnet 9. mars 2008]). online ( Memento av den opprinnelige fra 10 mai 2008 i Internet Archive ) Omtale: The arkiv koblingen er satt inn automatisk og har ennå ikke blitt sjekket. Kontroller originalen og arkivlenken i henhold til instruksjonene, og fjern deretter denne meldingen.  @1@ 2Mal: Webachiv / IABot / www.tutego.com
  3. ^ AWT-trådproblemer . ( online [åpnet 18. april 2007]).
  4. SwingUtilities (Java Platform SE 6) . 2006 ( online [åpnet 18. april 2007] Java API-dokumentasjon).
  5. Križnar Igor: SWT Vs. Swing Performance Comparison (PDF) cosylab.com. 3. mars 2006. Arkivert fra originalen 4. juli 2008. Info: Arkivkoblingen ble satt inn automatisk og er ennå ikke sjekket. Kontroller originalen og arkivlenken i henhold til instruksjonene, og fjern deretter denne meldingen. Hentet 16. september 2009: “ Innledende forventning før du utførte denne referansen var å finne SWT bedre enn Swing. Denne forventningen stammet fra større respons på SWT-baserte Java-applikasjoner (f.eks. Eclipse IDE) sammenlignet med Swing-baserte applikasjoner. Imidlertid kunne ikke denne forventningen kvantitativt bekreftes. " @1@ 2Mal: Webachiv / IABot / cosylib.cosylab.com
  6. Java Desktop ( Memento av den opprinnelige fra den 29 juli 2005 i Internet Archive ) Omtale: The arkivet koblingen ble satt inn automatisk og har ennå ikke blitt sjekket. Kontroller originalen og arkivlenken i henhold til instruksjonene, og fjern deretter denne meldingen. @1@ 2Mal: Webachiv / IABot / community.java.net
  7. Swing Depot: Component Suites ( Minne til originalen fra 9. juni 2009 i Internett-arkivet ) Info: Arkivkoblingen ble satt inn automatisk og har ennå ikke blitt sjekket. Kontroller originalen og arkivlenken i henhold til instruksjonene, og fjern deretter denne meldingen. @1@ 2Mal: Webachiv / IABot / www.javadesktop.org
  8. JGoodies hjemmeside
  9. Computerwoche : GUI-Builder for Eclipse ( Memento av 16. juli 2012 i Internett-arkivet ).
  10. eclipse.org