Swing (Java): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: sintassi dei link
Xqbot (discussione | contributi)
m r2.5.2) (Bot: Modifico: pt:Swing (Java); modifiche estetiche
Riga 1:
[[ImmagineFile:Gui-widgets.png|thumb|300px|Esempio di widget in Java 5.0+ per il [[X Window System]]. La renderizzazione dei font potrebbe variare a seconda della piattaforma utilizzata.]]
'''Swing''' è un [[framework]] per [[Java_Java (linguaggio)|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]] (oggetti grafici) come caselle di testo, pulsanti, pannelli e tabelle.
 
I widget Swing forniscono una GUI più sofisticata rispetto alla precedente [[Abstract Window Toolkit]]. Essendo scritti in puro [[Java_Java (linguaggio)|Java]], funzionano allo stesso modo su tutte le piattaforme (su cui java gira), al contrario delle AWT le quali sono legate al sistema grafico nativo del [[sistema operativo]]. Swing supporta il ''[[look and feel]]'' non tramite quello che viene fornito nativamente dal gestore delle finestre, ma tramite una sua emulazione. Questo significa che si può ottenere un qualsiasi L&F supportato su qualsiasi piattaforma. Lo svantaggio di questi componenti è quello di una più lenta esecuzione. Il vantaggio è una uniformità di visualizzazione tra svariate piattaforme.
 
== Storia ==
La ''Internet Foundation Classes'' (IFC) era una [[GL (grafica 3d)|libreria grafica]] per Java sviluppata originalmente dalla [[Netscape Communications Corporation]] e rilasciata per la prima volta nel [[16 dicembre]] [[1996]].
 
Riga 11:
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 contenuto nella gerarchia [[package (Java)|package]].
 
== Architettura ==
Swing è un modello di programmazione per il Java:
* indipendente dalla [[piattaforma (informatica)|piattaforma]]
Riga 40:
Soprattutto, l'architettura di Swing delega il compito del mappaggio di tutte le sfaccettature della semantica della GUI del SO in un semplice, ma generalizzato percorso al contenitore AWT. Poi, costruito su di una piattaforma generale, crea le sue proprie ricche e complesse semantiche della GUI, sotto forma della classe JComponent<ref>Il lettore interessato è incoraggiato a dare uno sguardo al codice sorgente delle classi Container.java e JComponent.java per ulteriori approfondimenti sull'interfacciamento tra i componenti Swing, più leggeri, e quelli AWT, più pesanti</ref>.
 
;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_interfaccia (informatica)|interfaces]]), il programmatore può usare varie implementazioni di default o crearne di proprie. Il framework provvede implementazioni di default di modelli per le interfacce per tutti i suoi componenti.
 
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.
Riga 53:
Concettualmente, questa visualizzazione della gestione del layout è abbastanza simile a quella che gestisce la renderizzazione del contenuto dell'[[HTML]] nei [[browser]], ed indirizza lo stesso insieme di concetti che hanno motivato i creatori.
 
== Look and feel ==
Swing permette di specializzare il [[look and feel]] dei suoi [[widget]], modificando quello di default (con parametri a runtime), basandosi su di uno esistente, creandone uno da zero, o, iniziando con '''J2SE 5.0''', usando lo skinnable Synth Look and Feel, il quale viene configurato con un file di proprietà [[XML]]. Il look and feel può essere modificato a runtime.
 
== Legami con AWT ==
Fin dalle prime versioni di Java, una porzione del [[Abstract Windowing Toolkit]] (AWT) ha fornito API indipendenti dalla piattaforma per i componenti della GUI. In AWT, ogni componente è renderizzato e controllato da uno nativo specifico per il sottostante 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. I componenti AWT vengono detti ''heavyweight components'' ("componenti pesanti").
Riga 62:
La maggior parte delle API Swing è generalmente una estensione complementare di AWT piuttosto che un diretto rimpiazzo. Infatti, ogni interfaccia Swing lightweight è basata su un componente AWT heavyweight perché tutti i componenti top-level in Swing JApplet, JDialog, JFrame e JWindow 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 JFC. Comunque l'uso contemporaneo di componenti lightweight ed heavyweight nella stessa finestra è generalmente scoraggiato per incompatibilità di [[Z-order]].
 
== Legami con SWT ==
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.
 
Riga 71:
SWT serve alla piattaforma delle finestre molto bene 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, che impattano sull'interazione dell'utente e sull'aspetto grafico della GUI.
 
== Esempio ==
Il seguente è un programma [[Hello world]] di esempio che usa Swing.
 
Riga 145:
* [[Project Looking Glass]]
 
== 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
Riga 152:
* Joshua Marinacci, Chris Adamson, ''Swing Hacks'', O'Reilly, ISBN 0-596-00907-0
 
== Note ==
<references/>
 
Riga 189:
[[nl:Swing (Java)]]
[[pl:Swing (Java)]]
[[pt:Java Swing (Java)]]
[[ru:Swing]]
[[uk:Swing (Java)]]