Swing (Java): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m nessuna indicazione della categoria/galleria Commons quando è presente la proprietà P373 |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
||
(7 versioni intermedie di 6 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.]]
'''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.
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]].
Riga 9:
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.
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
== Architettura ==
Riga 24:
* 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]]).
;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.
;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.
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.
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.
Riga 57:
=== Vantaggi rispetto ad AWT ===
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.
; Look and feel
Riga 74:
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.
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 }}.
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.
Riga 83:
Il seguente è un programma [[Hello World]] di esempio che usa Swing.
<
import javax.swing.*;
Riga 98:
}
// Questo metodo viene sempre invocato sul thread che gestisce la coda degli eventi ↓
Line 117 ⟶ 116:
}
}
</syntaxhighlight>
== Note ==
Line 131 ⟶ 130:
== Voci correlate ==
* [[Project Looking Glass]]
*[[JavaFX]]
== Altri progetti ==
Riga 139:
* {{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ì }}
[[Categoria:Piattaforma Java]]
|