„Swing (Java)“ – Versionsunterschied
[ungesichtete Version] | [ungesichtete Version] |
Benji (Diskussion | Beiträge) →Beispiel: entschlackt (siehe DIskussion) |
|||
Zeile 31: | Zeile 31: | ||
== Beispiel == |
== Beispiel == |
||
⚫ | |||
⚫ | |||
<source lang="java"> |
<source lang="java"> |
||
import javax.swing. |
import javax.swing.*; |
||
import javax.swing.JLabel; |
|||
import javax.swing.SwingUtilities; |
|||
import javax.swing.UIManager; |
|||
public class HelloWorldSwing { |
public class HelloWorldSwing { |
||
public static void main(String[] arg) { |
|||
⚫ | |||
⚫ | |||
// Swing anweisen, das Programm zu beenden, wenn das Fenster geschlossen wird |
|||
⚫ | |||
⚫ | |||
/* |
|||
* Erstellt die grafischen Komponenten und zeigt |
|||
* sie an. |
|||
*/ |
|||
private static void createAndShowGUI() { |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
JLabel label = new JLabel("Hallo Welt"); |
JLabel label = new JLabel("Hallo Welt"); |
||
fenster.getContentPane().add(label); |
|||
//Zeigt das Fenster an |
// Zeigt das Fenster an |
||
fenster.setSize(300, 200); |
|||
fenster.setVisible(true); |
|||
} |
|||
public static void main(String[] args) { |
|||
//Versucht das Motif-Look-And-Feel zu laden |
|||
try { |
|||
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); |
|||
} catch (Exception e){ |
|||
System.out.println("Das Motif-Look-And-Feel kann nicht geladen werden."); |
|||
} |
|||
//Führt den Code im "event dispatch thread" (EDT) aus |
|||
SwingUtilities.invokeLater(new Runnable() { |
|||
public void run() { |
|||
createAndShowGUI(); |
|||
} |
|||
}); |
|||
} |
} |
||
} |
} |
Version vom 2. Juli 2007, 21:24 Uhr

Bei Swing handelt es sich um eine Programmierschnittstelle und Grafikbibliothek zum Programmieren von grafischen Benutzeroberflächen. Swing wurde von Sun Microsystems für die Programmiersprache Java entwickelt. Seit Java-Version 1.2 (1998) ist es Bestandteil der Java-Runtime. Swing gehört zu den Java Foundation Classes (JFC), die eine Sammlung von Bibliotheken zur Programmierung von grafischen Benutzerschnittstellen bereitstellen. Zu diesen Bibliotheken gehören Java2D, das Accessibility-API, das Drag & Drop-API und das Abstract Window Toolkit (AWT). Swing baut auf dem älteren AWT auf und ist mit den anderen APIs verwoben.
Merkmale
- „Pluggable Look-and-Feels“
- Das Erscheinungsbild (Look, siehe Skin) und das Verhalten (Feel) von Swing-Komponenten kann mittels sogenannter Look-and-Feels angepasst werden. Auf allen Plattformen stehen sowohl das Motif-Look-and-Feel als auch das Metal-Look-and-Feel (ab Java 5 das Ocean-Look-and-Feel) zur Verfügung, auf Linux Gtk, Mac und Windows zusätzlich ein dem systemüblichen angepasstes eigenes Look and Feel. Es existieren eine Reihe unabhängig entwickelter Erscheinungsbilder, wovon die meisten auf Metal basieren. Seit Java 1.5 ist das Skin-Look and Feel hinzugekommen, das die Benutzeroberfläche aus Bildern zusammenbaut und in einer XML-Datei beschrieben wird, ohne dass Java-Code geschrieben werden müsste.
- Leichtgewichtige Komponenten
- Swing-Komponenten werden direkt von Java gerendert und sind nicht von nativen Betriebssystemkomponenten abhängig. Dadurch funktionieren alle Swing-Komponenten auf allen Plattformen gleich, unabhängig davon, ob die entsprechende Plattform eine Komponente zur Verfügung stellt oder nicht. Der Nachteil ist, dass eine Swing-Anwendung nicht wie eine für das Betriebssystem entwickelte Anwendung aussieht. Das kann aber durch eine Auswahl an entsprechenden Pluggable Look-and-Feels kompensiert werden. Diese Eigenschaft wird mit dem englischen Wort Lightweight UI beschrieben (lightweight = all-Java language).
- Unterschiede
- Im Vergleich zu AWT hat man mit Swing folgende zusätzliche Komponenten, die zur Oberflächenerzeugung genutzt werden können:
- Keyboard Accelerators, also Tastenkombinationen zur Steuerung von Komponenten
- Drag & Drop
- Setzen des Look and Feel
- Tooltips
- automatisches Double Buffering
- neue Layout-Manager/Panels
- Anwendungen mit Multiple Document Interface
- „Java2D“, umfangreiche Funktionalität zum Erzeugen zweidimensionaler Grafik
- zusätzliche Komponenten, um Tabellen und Baumstrukturen darzustellen
Swing wurde erstmals mit dem JDK 1.1.5 als externe Bibliothek ausgeliefert und ist seit JDK 1.2 („Java 2“) fester Bestandteil der Java-Laufzeitumgebung. Swing hatte sehr bald den Ruf, eine schlechte Performance aufzuweisen und für „ernsthafte“ Anwendungen ungeeignet zu sein. Der Standard-Stil (Look&Feel) von Swing-Fenstern fand ebenfalls nicht besonders viele Freunde. Mittlerweile hat sich die Performance durch verbesserte Hardwareunterstützung der Beschleunigungsfunktionen von Grafikkarten und über Performance-Verbesserungen in den Klassenbibliotheken selbst und bei der Java Runtime deutlich verbessert.
Swing ist sehr flexibel, sehr „sauber“, modular und objektorientiert aufgebaut, so dass es sich gerade für die Entwicklung komplexer Anwendungen gut eignet. Allerdings ist Swing nicht threadsicher. Durch die Plattformunabhängigkeit entfällt ebenfalls viel Entwicklungs- und Testarbeit. Gerade weil Swing sehr flexibel ist, kann es bei der Realisierung von eigenen Cutting-Edge-Komponenten zu einem Verlust der Plattformunabhängigkeit kommen, d. h. die Komponente passt dann nicht mehr zum eingestellten Look and Feel.
Hauptkonkurrent von Swing ist das für Eclipse entwickelte SWT.
Multithreading
Swing ist nicht thread-sicher, es kann also zu unerwarteten Wechselwirkungen zwischen verschiedenen Threads kommen, wenn nicht sorgfältig programmiert wird.[1] Statt dessen sind die Swing-Komponenten so implementiert, dass sie stets in einem sogenannten Event Dispatch Thread von AWT ausgeführt werden müssen, der die gesamte Ereignisverarbeitung grafisch-interaktiver Java-Anwendungen durchführt.[2] Um dies zu vereinfachen, stellt die Hilfsklasse SwingUtilities
zwei Methoden bereit, die aus anderen Threads heraus aufgerufen werden können und ein ausführbares Objekt vom Typ Runnable
als Parameter nehmen.[3]
invokeLater
reiht das ausführbare Objekt in die Ereigniswarteschlange von AWT ein und kehrt noch vor dessen Ausführung in den aufrufenden Code zurück. Der aufrufende Thread wird also nicht blockiert.invokeAndWait
reiht das ausführbare Objekt in die Ereigniswarteschlange von AWT ein und wartet, bis es abgearbeitet wurde. Der aufrufende Thread wird also blockiert.
Beispiel
Als Beispiel für eine Swing-Anwendung wird hier das obligatorische Hallo-Welt-Programm angegeben:
import javax.swing.*;
public class HelloWorldSwing {
public static void main(String[] arg) {
// 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.getContentPane().add(label);
// Zeigt das Fenster an
fenster.setSize(300, 200);
fenster.setVisible(true);
}
}
Einzelnachweise
- ↑ Christian Ullenboom: Java ist auch eine Insel. Galileo Computing, 2007, ISBN 3-89842-838-9, S. Abschnitt 14.24.1 (online [abgerufen am 18. April 2007]).
- ↑ AWT Threading Issues. (online [abgerufen am 18. April 2007]).
- ↑ SwingUtilities (Java Platform SE 6). 2006 (online [abgerufen am 18. April 2007] Java-API-Dokumentation).
Literatur
- Deutsche Bücher:
- David Geary: Graphic Java 2.0 Band II. Die JFC beherrschen (Swing). 3. Auflage. Markt+Technik, 15. November 1999, ISBN 3827295904 (Übersetzung des englischen Originals)
- David Geary: Graphic Java 2.0. Die JFC beherrschen (AWT). 3. Auflage. Markt+Technik, 15. Juli 1999, ISBN 3827295858 (Übersetzung des englischen Originals)
- Paul Fischer: Grafik-Programmierung mit Java-Swing. Addison-Wesley, 15. September 2001, ISBN 3827319102
- Englische Bücher:
- Marc Loy, Robert Eckstein, Dave Wood: Java Swing. 2. Auflage. O'REILLY, November 2002, ISBN 0596004087
- Kathy Walrath, Mary Campione, Alison Huml: The JFC Swing Tutorial. 2. Auflage. Addison-Wesley Professional, Februar 2004, ISBN 0201914670 (Sehr gute Referenz)
- Kim Topley: Core Swing Advanced Programming. Prentice Hall, 2000, ISBN 0130832928
- Kim Topley: Core, Java Foundation Classes. Prentice Hall, 1998, ISBN 0130803014
- David M. Geary: Mastering the JFC – Volume II Swing. 3. Auflage. Prentice Hall PTR, 1998, ISBN 0130796670 (Sehr gute Referenz)
- David M. Geary: Mastering the JFC – Volume I AWT. 3. Auflage. Prentice Hall PTR, 1999, ISBN 0130796662 (Sehr gute Referenz)