Swing (Java): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
 
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
 
(104 versioni intermedie di 54 utenti non mostrate)
Riga 1:
[[File:Gui-widgets.png|thumb|upright=1.4|Esempio di interfaccia grafica Swing. La renderizzazione dei font potrebbe variare a seconda della piattaforma utilizzata.]]
{{stub informatica}}
'''Swing''' è un [[framework]] per [[Java (linguaggio di programmazione)|Java]], appartenente alle [[Java Foundation Classes]] (JFC) e orientato allo sviluppo di [[GUI|interfacce grafiche]]. Parte delle [[classe (informatica)|classi]] del framework Swing sono implementazioni di [[widget (informatica)|widget]] (oggetti grafici) come caselle di testo, pulsanti, pannelli e tabelle.
{{T|lingua=inglese|argomento=informatica|data=ottobre 2006}}
{{Nota disambigua2|Questo articolo parla del toolkit grafico di [[Sun Microsystems]], per altri usi vedi [[Swing (disambigua)]].}}
 
La libreria Swing viene utilizzata come libreria ufficiale per la realizzazione di interfacce grafiche in Java. È un'estensione del precedente [[Abstract Window Toolkit]]. La differenza principale tra i due è che i componenti Swing sono scritti completamente in codice [[Java (linguaggio di programmazione)|Java]].
'''Swing''' è un [[toolkit grafico]] per [[Java (linguaggio)|Java]]. Swing fa parte del [[Java Foundation Classes]] (JFC). Swing include [[widget]] [[GUI|grafici]] come caselle di testo, pulsanti, <!--split-panes--> e tabelle.
 
== Storia ==
<!--
La ''Internet Foundation Classes'' (IFC) era una [[GL (grafica 3d)|libreria grafica]] per Java sviluppata originalmente dalla [[Netscape Communications Corporation]] e distribuita per la prima volta nel 16 dicembre [[1996]].
Swing widgets provide more sophisticated GUI [[Software component|components]] than the earlier [[Abstract Window Toolkit]]. Since they are written in pure [[Java programming language|Java]], they run the same on all platforms, unlike the AWT which is tied to the underlying platform's windowing system. Swing supports pluggable [[look and feel]] &ndash; not by using the native platform's facilities, but by roughly emulating them. This means you can get any supported look and feel on any platform. The disadvantage of lightweight components is possibly slower execution. The advantage is uniform behavior on all platforms.
 
Il 2 aprile [[1997]], [[Sun Microsystems]] e Netscape Communications Corporation annunciarono la loro intenzione di combinare IFC con altre tecnologie per creare la [[Java Foundation Classes]]. Oltre ai componenti originalmente forniti da IFC, Swing introdusse un meccanismo che permetteva il [[look and feel]] di ogni componente di una applicazione di essere alterato senza dover fare cambiamenti significativi al [[codice sorgente]]. L'introduzione del supporto al look and feel a [[plugin (informatica)|plug-in]] permise ai componenti Swing di emulare l'apparenza dei componenti nativi mantenendo comunque il beneficio di essere indipendenti dalla piattaforma. Questa caratteristica rende molto semplice l'avere un look di una applicazione individuale che appare significativamente differente da tutti gli altri programmi nativi.
==History==
The Internet Foundation Classes (IFC) were a [[graphics library]] for Java originally developed by [[Netscape Communications Corporation]] and first released on [[December 16]] [[1996]].
 
Originalmente distribuito come una libreria scaricabile separatamente, Swing fu inclusa come parte della [[Java 2 Platform, Standard Edition|Java Standard Edition]] fin dalla versione 1.2. Le classi Swing sono contenute nella gerarchia [[package (Java)|package]].
On [[April 2]] [[1996]], [[Sun Microsystems]] and [[Netscape Communications Corporation]] announced their intention to combine IFC with other technologies to form the [[Java Foundation Classes]]. In addition to the components originally provided by IFC, Swing introduced a mechanism that allowed the [[look and feel]] of every component in an application to be altered without making substantial changes to the application code. The introduction of support for a [[pluggable look and feel]] allowed Swing components to emulate the appearance of native components while still retaining the benefits of platform independence. This feature also makes it easy to have an individual application's appearance look very different from other native programs.
 
== Architettura ==
Originally distributed as a separately downloadable library, Swing has been included as part of the [[Java 2 Platform, Standard Edition|Java Standard Edition]] since release 1.2. The Swing classes are contained in the {{Javadoc:SE|package=javax.swing|javax/swing}} [[Java package|package]] hierarchy.
Swing è una libreria
* indipendente dalla [[piattaforma (informatica)|piattaforma]]
* orientata ai componenti
* estendibile
* modificabile
* configurabile
* ''loosely-coupled'' (ad accoppiamento debole)
* leggera
* a spedizione di eventi
* un framework GUI [[Model-View-Controller|MVC]]
* con un [[thread (informatica)|thread]] unico
 
;Indipendente dalla piattaforma: Swing è indipendente dalla piattaforma sia in termini di linguaggio (Java) sia della sua implementazione (una renderizzazione universale e non nativa dei [[widget (informatica)|widget]]).
==Architecture==
;Estendibile: le diverse parti della libreria Swing sono basate su determinate interfacce e sono collegate in modo da consentire facilmente l'aggancio di implementazioni diverse di queste interfacce. Il programmatore può creare un'implementazione personalizzata di queste interfacce o utilizzare le versioni di default.
The Swing library makes heavy use of the [[Model-view-controller|Model/View/Controller]] software [[design pattern (computer science)|design pattern]], which attempts to separate the data being viewed from the method by which it is viewed. Because of this, most Swing components have associated ''models'' (typically as [[interface (computer science)|interfaces]]), and the programmer can use various default implementations or provide their own. For example, the {{Javadoc:SE|javax/swing|JTable}} has a model called {{Javadoc:SE|javax/swing/table|TableModel}} that describes an interface for how a table would access tabular data. A default implementation of this operates on a two-dimensional [[array]].
;Orientata ai componenti: Swing è un framework basato su componenti. Un componente è un oggetto con determinate caratteristiche di comportamento conosciute e specificate. Gli oggetti Swing emettono [[evento (informatica)|eventi]] in modo asincrono, hanno caratteristiche legate ad essi stessi, e rispondono da un ben preciso set di comandi (specifico per componente). In particolare i componenti ''Swing Java Beans'' seguono le specifiche dell'architettura [[JavaBean]].
;Modificabile: l'applicazione ha modo di ottenere un preciso controllo della renderizzazione dei componenti con i quali è realizzata l'interfaccia grafica. La rappresentazione grafica di un componente swing è data da una combinazione di un set standard di elementi; in particolare, ad ogni componente è affidato il disegno dei bordi, delle rientranze, delle decorazioni, ecc. Solitamente, gli utenti modificano un componente standard di Swing (come una ''JTable'') assegnando bordi, colori, sfondi specifici come proprietà del componente. Il componente userà queste proprietà all'atto del disegnarsi.
;Configurabile: Swing, facendo un uso pesante dei meccanismi di runtime e dei percorsi di renderizzazione indiretta, ha la possibilità di modificare a runtime cambiamenti anche fondamentali nei suoi settaggi. Per esempio, una applicazione basata su Swing può cambiare il suo look and feel a [[runtime]] (per esempio, dal look and feel di [[MacOS]] a quello di [[Windows XP]]). Inoltre, gli utenti possono fornire le loro proprie implementazioni di look and feel, il che permette di ottenere cambiamenti uniformi nei look and feel di applicazioni Swing esistenti, senza dover modificare in profondità il codice sorgente dell'applicazione.
;Leggera: La configurabilità di Swing è anche dovuta al fatto che non necessita di usare i controlli della GUI del [[sistema operativo|SO]] nativi per la ''rappresentazione'', ma piuttosto "disegna" i suoi controlli costantemente, attraverso l'uso delle [[Application programming interface|API]] 2D di Java. Inoltre, un componente Swing non deve necessariamente un corrispettivo nell'insieme dei componenti nativi del SO, e questo significa che è possibile realizzare componenti con la massima libertà, sfruttando a propria discrezione le potenzialità messe a disposizione dalle [[Libreria (software)|librerie]] grafiche di Java 2D.
 
;Loosely-Coupled/MVC: La libreria Swing fa un forte uso del ''design pattern'' [[Model-view-controller|Model/View/Controller]], il quale concettualmente disaccoppia i dati mostrati ed i controlli dell'interfaccia utente attraverso i quali sono mostrati. Grazie a questo, la maggior parte dei componenti Swing hanno associati ''modelli'' (specificati in termini di Java [[interfaccia (informatica)|interfaces]]), il programmatore può usare varie implementazioni di default o crearne di proprie. Il framework fornisce implementazioni di default di modelli per le interfacce per tutti i suoi componenti.
Swing favors relative layouts (which specify the positional relationships between components), as opposed to absolute layouts (which specify the exact ___location and size of components). The motivation for this is to allow Swing applications to work and appear visually correct regardless of the underlying systems colors, fonts, language, sizes or I/O devices. This can make screen design somewhat difficult and numerous tools have been developed to allow visual designing of screens.
 
Tipicamente, gli oggetti dei modelli dei componenti Swing sono responsabili di provvedere ad una concisa interfaccia per la definizione degli eventi che vengono emessi, nonché proprietà accessibili per il [[modello dei dati]] da usare con i JComponent associati. Dato questo il modello di sviluppo MVC è un percorso loosely-coupled di oggetti in relazione collaborativamente, il modello provvede i consueti modi per creare ''event listeners'' agli oggetti del ''data model''. Tipicamente, questi eventi sono ''model centric'' (ad esempio: l'inserimento di righe in un modello di tabella) e sono mappati dalla specializzazione del JComponent in un ben preciso evento per il componente GUI.
Swing also uses a [[publish subscribe]] event model (as does AWT), where ''listeners'' subscribe to events that are fired by the application (such as pressing a button, entering text or clicking a checkbox). The model classes typically include, as part of their interface, methods for attaching listeners (this is the ''publish'' aspect of the event model).
 
Per esempio, il JTable ha un modello chiamato ''TableModel'' che descrive una interfaccia per come una tabella dovrebbe accedere ai dati. Una implementazione di default di questo opera su di un [[array]] bidimensionale.
The frequent use of [[loose coupling]] within the framework makes Swing programming somewhat different from higher-level GUI design languages and [[4GL|4GLs]]. This is a contributing factor to Swing having such a steep [[learning curve]].
 
La componente visiva di un JComponent Swing è l'oggetto usato per "rappresentare" graficamente il controllo GUI concettuale. Una distinzione di Swing, come framework GUI, è il suo utilizzo sulla continua rappresentazione di controlli GUI (al contrario dell'uso dei componenti nativi della gui del SO). Questa distinzione è fonte di complicazione quando si mischiano controlli AWT, che usano controlli nativi, con controlli Swing in una GUI.
==Look and feel==
Swing allows one to specialize the [[Look_and_feel#Look and Feel in Widget Toolkits|look and feel]] of [[Widget_(computing)|widgets]], by modifying the default (via runtime parameters), deriving from an existing one, by creating one from scratch, or, beginning with '''J2SE 5.0''', by using the [[skinnable]] {{Javadoc:SE|package=Synth Look and Feel|javax/swing/plaf/synth}}, which is configured with an [[XML]] property file. The look and feel can be changed at runtime, and early demonstrations of Swing would frequently provide a way to do this.
 
Deve essere notato che il tipico uso del framework Swing non richiede la creazione di modelli modificati, siccome il framework fornisce un insieme di implementazioni di default che sono trasparentemente, per default, associati con le corrispondenti figlie della classe JComponent nella libreria Swing. In generale, solo componenti complessi come le tabelle e le viste di collezioni ''potrebbero'' aver bisogno di modifiche ai loro modelli di default<ref>Comunque, per capire bene il potenziale che l'architettura Swing rende possibile, considerate l'ipotetica situazione in cui i modelli modificati delle tabelle e le liste sono creati al di sopra di servizi DAO e/o EJB</ref>.
==Relationship to AWT==
Since early versions of Java, a portion of the [[Abstract Windowing Toolkit]] (AWT) has provided platform independent APIs for user interface components. In AWT, each component is rendered and controlled by a native peer component specific to the underlying windowing system.
 
== Legami con AWT ==
By contrast, Swing components are often described as ''lightweight'' because they do not require allocation of native resources in the operating system's windowing toolkit. The AWT components are referred to as ''heavyweight components''.
[[File:AWTSwingClassHierarchy.png|thumb|Schema che illustra l'organizzazione dei componenti grafici AWT e dei componenti grafici Swing.]]
La libreria Swing è un'estensione di AWT, più che un suo sostituto. Infatti ogni interfaccia grafica Swing ''lightweight'' è basata su un componente AWT ''heavyweight'', perché tutti i componenti top-level in Swing estendono i container top-level AWT. La funzionalità di renderizzazione usata da Swing per disegnare i suoi componenti è fornita da Java2D, un'altra parte di AWT. La disposizione dei componenti viene affidata ai <kbd>java.awt.LayoutManager</kbd>. ecc.
 
=== Differenze con AWT: il meccanismo di funzionamento ===
Much of the Swing API is generally a complementary extension of the AWT rather than a direct replacement. In fact, every Swing lightweight interface ultimately exists within an AWT heavyweight component because all of the top-level components in Swing ({{Javadoc:SE|javax/swing|JApplet}}, {{Javadoc:SE|javax/swing|JDialog}}, {{Javadoc:SE|javax/swing|JFrame}}, and {{Javadoc:SE|javax/swing|JWindow}}) extend an AWT top-level container. The core rendering functionality used by Swing to draw its lightweight components is provided by [[Java2D]], another part of JFC. However, the use of both lightweight and heavyweight components within the same window is generally discouraged due to [[Z-order]] incompatibilities.
Fin dalle prime versioni di Java, una porzione del [[Abstract Window Toolkit]] (AWT) ha fornito API indipendenti dalla piattaforma per la realizzazione delle GUI. In AWT, di fatto l'applicazione si serve di oggetti Java per controllare i componenti nativi specifici per il sistema operativo in utilizzo e che compongono l'interfaccia grafica. Questo significa che il comportamento dei componenti (la reazione agli eventi, il rendering, ecc.) sono affidati alla loro implementazione ''system-dependent''. Per questo motivo, i componenti AWT vengono detti ''heavyweight components'' ("componenti pesanti"): a ciò che l'applicazione "vede" come la creazione di un componente AWT, di fatto corrisponde l'allocazione di risorse ad opera del sistema operativo. Al contrario, i componenti Swing sono spesso descritti come ''lightweight'' ("leggeri"), perché non necessitano l'allocazione di risorse native nel toolkit della GUI del sistema operativo.
 
=== Elementi di AWT utilizzati in Swing ===
==Relationship to SWT==
; Layout managers
The [[Standard Widget Toolkit]] (SWT) is a competing toolkit originally developed by [[IBM]] and now maintained by the [[Eclipse Foundation]]. SWT's implementation has more in common with the heavyweight components of AWT. This confers benefits such as more accurate fidelity with the underlying native windowing toolkit, at the cost of an increased exposure to the native resources in the programming model.
Alla fine, in termini di composizione visuale e gestione, Swing possiede layout relativi (i quali specificano la posizione reciproca tra i componenti) che operano in maniera opposta rispetto al layout assoluto (nel quale è necessario specificare apposta la esatta posizione e le dimensioni di ogni componente). Questa direzione verso visualizzazioni "fluide" è una diretta politica dello sviluppo di Swing che riemerge dalle ceneri del framework AWT e l'associata assunzione sulle [[applet]] dell'ambiente operativo che ha tracciato il disegno e sviluppo dell'originale toolkit GUI di Java.
Concettualmente, questa visualizzazione della gestione del layout è abbastanza simile a quella che gestisce la renderizzazione del contenuto [[HTML]] nei [[browser]], ed indirizza lo stesso insieme di concetti che hanno motivato i suoi creatori.
 
; Container top-level
The advent of SWT has given rise to a great deal of division among Java desktop developers with many strongly favouring either SWT or Swing. A renewed focus on Swing look and feel fidelity with the native windowing toolkit in the approaching [[Java SE 6]] release ([[as of 2006|as of February 2006]]) is probably a direct result of this.
Se è vero che i singoli componenti sono realizzati completamente in codice Java, i container ''top-level'' (finestre di dialogo e applet) sono parzialmente implementati in codice nativo.
 
=== Vantaggi rispetto ad AWT ===
==Example==
I principali vantaggi di Swing rispetto ad AWT sono conseguenza del fatto stesso che i componenti Swing sono realizzati in puro codice Java. Infatti, questo significa che i componenti funzionano allo stesso modo su tutte le piattaforme per le quali esiste una [[macchina virtuale]]. I bug rilevati durante l'esecuzione del sistema grafico (almeno per la parte che riguarda l'interfaccia grafica) sono gli stessi su tutte le piattaforme, il che permette di risolverli con un semplice aggiornamento delle librerie.
The following is a [[Hello World]] program using Swing.
import javax.swing.JFrame;
import javax.swing.JLabel;
public final class HelloWorld extends JFrame {
private HelloWorld() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getContentPane().add(new JLabel("Hello, World!"));
pack();
setLocationRelativeTo(null);
}
public static void main(String[] args) {
new HelloWorld().setVisible(true);
}
}
 
; Look and feel
==See also==
Poiché i componenti sono sviluppati in Java, il sistema Swing ha controllo sul [[render]]ing grafico dei componenti, e questo ha consentito lo sviluppo di un'API tramite la quale un'applicazione può personalizzare il ''[[look and feel]]'' della propria interfaccia grafica. In poche parole, il disegno e lo stile grafico dei componenti non vengono richiesti al toolkit grafico nativo del sistema operativo, ma vengono riprodotti tramite una loro emulazione. Questo significa che si può ottenere un nuovo L&F semplicemente implementando le classi Java necessarie (oppure configurando il look and feel Synth, introdotto a partire dal J2SE 5.0).
* [[Project Looking Glass]]
* [[Event dispatching thread]]
* [[SwingWorker]]
* [[CookSwing]]
 
; Libertà nel rendering
==References==
Il principale vantaggio della libreria Swing è che essa permette al programmatore di astrarsi dai vincoli imposti dall'architettura del sistema grafico adottato dal sistema operativo in uso. Il sistema grafico AWT risente di queste limitazioni, in quanto l'insieme dei componenti e le caratteristiche che questi ultimi offrono all'applicazione sono ristretti ad uno standard comune, un minimo insieme che possa essere supportato da tutti i sistemi operativi sui quali AWT deve funzionare.
* [[Matthew Robinson]]: ''Swing'', Manning, ISBN 1-930110-88-X
* [[David M. Geary]]: ''Graphic Java 2, Volume 2: Swing'', Prentice Hall, ISBN 0-13-079667-0
* [[James Elliott]], [[Robert Eckstein]], [[Marc Loy]], [[David Wood]], [[Brian Cole]]: ''Java Swing'', O'Reilly, ISBN 0-596-00408-7
* [[Kathy Walrath]], [[Mary Campione]], [[Alison Huml]], [[Sharon Zakhour]]: ''The JFC Swing Tutorial: A Guide to Constructing GUIs'', Addison-Wesley Professional, ISBN 0-201-91467-0
* [[Joshua Marinacci]], [[Chris Adamson]]: ''Swing Hacks'', O'Reilly, ISBN 0-596-00907-0
 
I componenti Swing gestiscono in modo autonomo la propria grafica e il proprio comportamento; è pur vero che il rendering finale deve essere affidato al sistema operativo, in quanto è quest'ultimo che ha in mano la gestione delle periferiche video e delle periferiche che segnalano l'input utente (tastiera, mouse, rotellina del mouse, ecc.), ma è anche vero che Swing "traduce" la sua [[semantica]] su quella sottostante dei componenti del SO con un legame molto più debole rispetto a quanto l'architettura stessa dell'AWT consentiva di ottenere.<br />
==External links==
Così, per esempio, di fatto ogni componente di Swing si disegna sul dispositivo grafico del sistema operativo servendosi di un [[wrapper]] opportunamente implementato in Java (realizzato tramite un oggetto <kbd>java.awt.Graphics</kbd>). Ma, differentemente dai componenti AWT, i quali delegano il disegno ai widget nativi del SO, i componenti di Swing sono responsabili della loro stessa renderizzazione.
* [http://java.sun.com/docs/books/tutorial/uiswing/index.html The Swing Tutorial]
 
* [http://java.sun.com/products/jfc/tsc/index.html The Swing Connection]
=== Svantaggi rispetto ad AWT ===
* {{Javadoc:SE-guide|swing|The Swing API documentation}}
Il principale svantaggio rispetto ad AWT è quello di una più lenta esecuzione.
* [http://java.sun.com/products/jfc/tsc/articles/architecture/ The Swing architecture]
 
* [http://community.java.net/javadesktop/ JavaDesktop]
== Legami con SWT ==
* [http://www.javootoo.com/ Java Look And Feel]
Lo [[Standard Widget Toolkit]] (SWT) è un toolkit concorrente originalmente sviluppato dalla [[IBM]] ed ora mantenuto dalla [[Eclipse Foundation]]. Le implementazioni SWT sono più in comune con i componenti AWT heavyweight. Questo conferisce benefici come una più accurata fedeltà con il sottostante toolkit window nativo, al costo di una maggior esposizione ad una programmazione più nativa nel modello di programmazione.
* [http://www.clientjava.com/ ClientJava.com]
 
* Presentation "[http://javalobby.org/eps/galbraith-swing-1/ Professional Swing: Creating Polished Apps, Part 1/2]" by [[Ben Galbraith]]
L'avvento di SWT ha dato origine ad una grande divisione tra gli sviluppatori del Java desktop con molti fortemente favorevoli a SWT e altri a Swing. Lo sviluppo di Sun su Swing continua a concentrarsi sulla fedeltà del look and feel (PLAF, Pluggable look and feel) in ogni toolkit window. Nel frattempo non vi sono altre risorse di PLAFs fedeli, molti dei quali sono nel sito [http://www.javootoo.com/ javootoo] {{Webarchive|url=https://web.archive.org/web/20050715034602/http://www.javootoo.com/ |date=15 luglio 2005 }}.
* Presentation "[http://www.javalobby.org/eps/galbraith-swing-2/ Professional Swing: Creating Polished Apps, Part 2/2]" by [[Ben Galbraith]]
 
* Article "[http://javalobby.org/articles/swing_slow/index.jsp What does "Swing is Slow" mean?]" by [[Sermet Yucel]]
C'è stato un dibattito significativo sulle prestazioni di SWT rispetto a quelle di Swing; La dipendenza di SWT da JNI lo rende lento quando i componenti GUI e Java necessitano di scambiarsi i dati, ma più veloce a disegnarsi quando il modello dei dati è stato caricato nella GUI.
* Article "[http://www.onjava.com/pub/a/onjava/2004/02/18/desktop.html Java Desktop Development]" by [[Andrei Cioroianu]]
 
* Article "[http://www.onjava.com/pub/a/onjava/2004/03/10/blackmamba.html BlackMamba: A Swing Case Study]" by [[Ashwin Jayaprakash]]
SWT serve alla piattaforma delle finestre molto bene <!-- CHE SIGNIFICA L'INIZIO DI QUESTA FRASE??--> ma alcuni la considerano meno efficace come tecnologia per lo sviluppo multipiattaforma. Usando le funzionalità di alto livello dei window toolkit nativi, SWT riporta alla situazione vista negli anni '90 (con toolkit come zApp, Zinc, XVT e IBM/[[Smalltalk]]) dove i toolkit cercavano di mascherare le differenze nel comportamento e gestione del focus, della gestione degli eventi e dei layout grafici. Il fallimento di avere eguali comportamenti su ogni piattaforma può causare errori di programmazione subdoli e difficili da risolvere, con effetti negativi sull'interazione dell'utente e sull'aspetto grafico della GUI.
* [http://www.javaworld.com/channel_content/jw-awt-index.shtml Articles on AWT/Swing]
 
* [http://citeseer.ist.psu.edu/cis?q=Java+Swing Citations from CiteSeer]
== Esempio ==
* [http://www.swingwiki.org Swing wiki] containing best practices, tips, tricks and howto tutorials
Il seguente è un programma [[Hello World]] di esempio che usa Swing.
* [http://www.jgoodies.com JGoodies ]
 
<syntaxhighlight lang="java">
import javax.swing.*;
 
public final class HelloWorld {
 
public static void main(String[] args) {
 
/* Questo fa sì che tutto il codice che crea e mostra a schermo la GUI venga eseguito sul thread
che gestisce la coda degli eventi di Swing (e di AWT). */
SwingUtilities.invokeLater(new Runnable() {
public void run() {
mainOnEventDispatchThread();
} });
}
 
// Questo metodo viene sempre invocato sul thread che gestisce la coda degli eventi ↓
 
private static void mainOnEventDispatchThread() {
// Create frame with title "Hello, World!"
JFrame f = new JFrame("Hello, World!");
// Dimensione della finestra
f.setSize(200, 100);
 
// Fa sì che il frame richieda alla JVM di terminare il programma
// quando la finestra viene chiusa.
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
 
f.add(new JLabel("Hello, World!"));
 
f.setVisible(true);
}
}
</syntaxhighlight>
 
== Note ==
<references/>
 
== Bibliografia ==
* Matthew Robinson, ''Swing'', Manning, ISBN 1-930110-88-X
* David M. Geary, ''Graphic Java 2, Volume 2: Swing'', Prentice Hall, ISBN 0-13-079667-0
* James Elliott, Robert Eckstein, Marc Loy, David Wood, Brian Cole, ''Java Swing'', [[O'Reilly Media|O'Reilly]], ISBN 0-596-00408-7
* Kathy Walrath, Mary Campione, Alison Huml, Sharon Zakhour, ''The JFC Swing Tutorial: A Guide to Constructing GUIs'', Addison-Wesley Professional, ISBN 0-201-91467-0
* Joshua Marinacci, Chris Adamson, ''Swing Hacks'', O'Reilly, ISBN 0-596-00907-0
 
== Voci correlate ==
* [[Project Looking Glass]]
*[[JavaFX]]
 
== Altri progetti ==
[[Category:Java platform]]
{{interprogetto}}
[[Category:Java programming language]]
[[Category:Java libraries]]
[[Category:Widget toolkits]]
 
== Collegamenti esterni ==
-->
Link dai siti ufficiali:
* {{cita web|http://java.sun.com/products/jfc/tsc/articles/architecture/|A Swing architecture overview}}
* {{cita web|http://java.sun.com/docs/books/tutorial/uiswing/index.html|The Swing Tutorial}}
* {{cita web |1=http://community.java.net/javadesktop/ |2=JavaDesktop |accesso=1º ottobre 2006 |urlarchivio=https://web.archive.org/web/20050729002040/http://community.java.net/javadesktop/# |dataarchivio=29 luglio 2005 |urlmorto=sì }}
 
Altri link:
* Articolo ''[http://www.onjava.com/pub/a/onjava/2004/02/18/desktop.html Java Desktop Development]'' di Andrei Cioroianu
* Articolo ''[http://www.onjava.com/pub/a/onjava/2004/03/10/blackmamba.html BlackMamba: A Swing Case Study]'' di Ashwin Jayaprakash
*{{cita web | 1 = http://www.swingwiki.org/ | 2 = Swing wiki | accesso = 17 aprile 2011 | urlarchivio = https://web.archive.org/web/20110526164920/http://www.swingwiki.org/ | dataarchivio = 26 maggio 2011 | urlmorto = sì }}
 
[[deCategoria:SwingPiattaforma (Java)]]
[[en:Swing (Java)]]
[[es:Swing (biblioteca gráfica)]]
[[fr:Swing (Java)]]
[[ko:Swing]]
[[lt:Swing]]
[[nl:Swing (Java)]]
[[ja:Swing]]
[[pl:Swing (Java)]]
[[pt:Swing (api)]]
[[ru:Swing]]
[[fi:Swing (Java)]]
[[zh:Swing]]