Introduzione a Java Swing

In questo articolo e nei prossimi che seguiranno, vogliamo analizzare come costruire interfacce grafiche, le famose graphical user interface, ovvero GUI, con Java. Java, nel momento che scriviamo, sta sempre più indirizzando le proprie strategie di GUI verso il Web e quindi interfacce basate su HTML/CSS e i vari framework JS, ma mantiene ancora un supporto, seppur limitato, alle interfacce per software stand-alone.

Nella famiglia Java esistono più librerie o, se preferite, interfacce grafiche: AWT (Abstract Windowing Toolkit), Swing and JavaFX. AWT è stata la prima libreria, seguita da una più raffinata e complessa Swing. JavaFx, fino a pochi anni fa, intendeva essere il sostituto di Swing a tutti gli effetti. In realtà, come detto nell’incipit, Java si sposta sempre più verso approccio web, con le applet lato client che non sono più supportate dai recenti browser, e il predominio lampante di framework come Angular, Node.JS, React che intendono modificare profondamente il mondo della programmazione web, forti dell’approccio infrastrutturale di rete che va sempre più verso il cloud, rendendo i nostri software sul pc obsoleti (vedi word ed excel di Google ad esempio). JavaFx di fatto esiste ancora, rilasciata ed integrata nel kit di sviluppo JDK di Java 8, 9 e 10, nell’ultima release Java 11 è però stato messo come elemento aggiuntivo da scaricare a parte, decretandone la morte. JavaFX è stato ufficialmente rilasciato alla comunità con link qui.

Perché allora un corso come questo? Ha ancora senso imparare ad usare Swing? La risposta non è univoca ma, secondo me, si. Non tutti i software che useremo saranno usabili o ottimizzati per il Cloud, sviluppatori per applicazioni stand-alone continueranno a produrre software in chiave non distribuita. Perché usiamo Swing e non JavaFx visto che sono più recente e sfruttano anche caratteristiche video ed hardware più avanzate? Qui la scelta è dettata dalla necessità. I PC di molti laboratori ed anche uffici spesso hanno installato Windows XP come sistema operativo. Poiché Microsoft non rilascia più supporto per tale versione, anche in casa Oracle hanno interrotto i rilasci: Java 8 è l’ultima versione compatibile ma include di ufficio la libreria Swing. Inoltre le macchine che usano XP non godrebbero neanche a pieno delle performance del JavaFX, quindi meglio volare più bassi. A supporto poi abbiamo deciso di installare come IDE, Netbeans nella versione 7 che è pienamente matura, leggera per hardware poco esigente e supporta in modo agevole Java 8, Swing e tutto il necessario per lavorare, sviluppare e testare le nostre applicazioni. Se avete macchine più recenti, potete installare NetBeans 8.2, ci sono solo migliorie prestazionali e bugfix per quello che interessa a noi. Tralasciamo la versione successiva Apache NetBeans 9 e 10 per praticità ma è interessane come, con un solo installer, abbiamo tutte le versioni per Windows e Linux con una interfaccia pressoché simile alle versioni precedenti. Sulle distribuzioni linux, in genere, sono rilasciate distintamente la versione 10 e 8.2 ma occhi che la 8.2 è compatibile con la jdk 8 ma non 11.  Altre caratteristica che ci invoglia ad usare Swing è che son ancora ufficiali e supportate, quindi godono di una compatibilità piuttosto trasversale. Nulla toglie che questo corso possa essere rivisto ed aggiornato con novità più alettanti in un prossimo futuro.

Java SDK -> Download

NetBeans 7 -> Download

NetBeans 8 -> Download

Il nostro primo progetto

Creiamo il nostro primo progetto con NetBeans. E’ molto semplice e lineare. Basta andare nel menù in alto a sinistra File -> New Project -> Java -> Java Application. Clicchiamo su Next. Nella nuova finestra diamo un nome al nostro progetto in alto e abbiamo cura di togliere i flag “Create Main class” e nelle versioni più vecchie “Set as Default project“. Mentre il secondo è intuitivo, il primo flag serve a non far creare una classe col relativo file Main. Come in  analogia ai liguaggi che conoscete il main è sempre il codice che viene eseguito principalmente e che poi eventualmente richiama altri sorgenti del progetto e librerie esterne. Nel nostro caso per semplicità però, il main sarà il Frame, ovvero la schermata principale che andiamo a realizzare. Se volessimo creare una applicazione Java da console, come le classiche applicazioni che creano gli alunni in 2/3 anno di scuola, dovremmo invece necessariamente avere questa classe main. Una precisazione è bene farla subito e che sia impressa in mente al lettore: java ragiona per classi e qualsiasi classe si vada a creare deve essere contenuta in un file che riporta esattamente lo stesso nome tra maiuscole e minuscole.

Finalmente abbiamo il nostro progetto. Per completezza, nella creazione dei progetti, c’è anche una voce Semples. Questa per i più curiosi, contiene una serie di esempi gia preconfezionati da visionare e subito eseguire. A seconda delle versioni dell’ide e della jdk, questo numero può variare. Quasi sicuramente c’è un esempio anche di Swing. Diamo un’occhiata all’ambiente di sviluppo. Ricalca un po’ il classico dei moltissimi ide che potete trovare in giro. Al centro la pagina dove scrivere il codice. Al lato due finestra predefinite. In una, quella in basso, detta navigator, possiamo vedere tutti gli oggetti che andiamo a creare nel nostro codice. Questa forse è una delle più importanti poiché possiamo rinominarci in modo semplice e veloce tutti i vari pulsanti, menu, ecc che creiamo nella nostra finestra (col bottone F2) o tasto destro->change variable name. In genere, un po’ come fa Apple che chiama tutto i-qualcosa, anche qui in java troviamo tutti i nomi che iniziano con la j. Non è ovviamente obbligatorio! Nella parte in alto a sinistra,  si può vedere la struttura del nostro progetto. Nell’albero notiamo sicuramente la voce Library, dove è gia contenutaa la JDK e dove, eventualmente possiamo aggiungere librerie esterne e una porzione <default package> dove andremo a creare i nostri file. All’interno del progetto, possono esserci svariati package, magari ognuno con un aspetto o funzionalità ma per i nostri esercizi, manteniamo un livello di semplificazione con un solo package.

Proprio qui su <default package>, clicchiamo destro ->  New -> JFrame Form da non confondere con JPanel Form, su cui faremo considerazioni più avanti.

La schermata centrale cambia radicalmente. Compare un quadrato grigio, che sarà la base della nostra form su cui lavorare; a destra compare la paletta con tutti i widget Swing, ovvero i vari pulsanti ed elementi che possiamo inserire nel nostro software. In basso alla paletta, una finestrella dove troveremo, ogni volta che selezioniamo un oggetto widget, le sue proprietà fondamentali. Non ci serviranno tutte e le andremo a vedere un po’ volta per volta con i nostri esempi. Nella parte centrale invece notiamo come siano comparsi tre pulsanti Souce Design History. Tralasciamo history, Source ci mostrerà il codice sorgente di quello che stiamo disegnando nella porzione design. Ci si potrà accedere anche cliccando due volte col tasto sinistro del mouse su uno dei widget che abbiamo posizionato. Nei prossimi post entreremo nel vivo con qualche esempio pratico.

Ultima modifica 10 Novembre 2023