JavaFX software | |
---|---|
Genere | Framework (non in lista) |
Sviluppatore | OpenJFX |
Ultima versione | 23.0.1 (ottobre 2024) |
Sistema operativo | Multipiattaforma |
Linguaggio | Java |
Licenza | GPL v2 con Classpath Exception (licenza libera) |
Sito web | openjfx.io |
JavaFX è una famiglia di software applicativi, basati sulla piattaforma Java, per la creazione di rich Internet application, applicazioni web che hanno tutte le caratteristiche e funzionalità delle comuni applicazioni per computer. Con JavaFX è possibile realizzare delle applicazioni per computer, cellulari, dispositivi portatili di vario genere, televisori e altri tipi di piattaforme.
JavaFX è uno dei principali attori nel mercato delle rich Internet application, in gara con Adobe Flex e Microsoft Silverlight, anche se attualmente il suo utilizzo è marginale rispetto ai concorrenti[1].
Sun sostiene che il 90% dei PC abbia Java installato e che sui cellulari Java sia la piattaforma dominante; per queste ragioni JavaFX sarebbe l'ambiente di sviluppo per rich Internet application più permeante nel mercato.[2]
Oltre ad una crescente libreria di funzionalità grafiche, include un vero e proprio linguaggio di programmazione indipendente da Java, chiamato "JavaFX script", un linguaggio di scripting dichiarativo e staticamente tipizzato fortemente orientato alla programmazione grafica; questo rende la programmazione di rich Internet application, e di applicazioni grafiche in genere, particolarmente agevolata.
In aggiunta al pacchetto JavaFX SDK, che include compilatore, utilità per l'esecuzione, e tutta la libreria JavaFX necessaria per lo sviluppo, sono stati distribuiti alcuni strumenti che rendono lo sviluppo in JavaFX molto più agile:
A partire da Java 7, la libreria di JavaFX è distribuita con il Java Runtime Environment.
JavaFX introduce un linguaggio di scripting dichiarativo ad oggetti, con molti riferimenti alla programmazione funzionale, estremamente pratico per lo sviluppo di applicazioni grafiche, con una sintassi simile a JavaScript e, per certi aspetti, ad ActionScript, che permette di gestire in modo semplice ed efficace le interazioni tra i controlli grafici, e rende del tutto banale la gestione delle animazioni più comuni (dissolvenze, ingrandimenti, spostamenti ecc.). JavaFX elimina quindi tutta la ridondanza tipica di Java, e rappresenta un naturale passaggio per i programmatori tradizionali dello storico linguaggio di Sun.
JavaFX permette anche di interagire senza alcuno sforzo con classi Java preesistenti. È inoltre possibile fare l'opposto: si può includere una applicazione JavaFX all'interno di un normale programma scritto in Java e Swing[3].
Lo spazio grafico di lavoro di JavaFX è un oggetto Stage
, radice di ogni applicazione JavaFX, che può intercambiare oggetti Scene
, dei contenitori (oggetti che estendono la classe Container
) di generici componenti grafici (Node
). A tutti gli effetti un oggetto Scene
è un albero di nodi, in cui ogni nodo può essere sia un contenitore (che ad esempio specifica la disposizione bidimensionale dei suoi sotto componenti), sia un nodo grafico, cioè un Lightweight Component con una opportuna rappresentazione ed una serie di attributi che ne descrivono le proprietà (posizione, dimensioni, colorazione ecc.): il concetto ricorda molto quello di DOM di una pagina HTML, in cui possono essere disposti opportuni tag con alcuni attributi.
Funzionalità degna di nota è il "binding" (letteralmente "legare"): la possibilità di associare ad una variabile A
(in questo caso un numero) una espressione ESPR
var A : Number = bind ESPR
ogni qualvolta ESPR
cambia valore, anche il valore di A (ovunque sia utilizzato) varia: questo introduce grossi problemi di prestazioni, soprattutto nel caso di abuso di binding, ma semplifica estremamente la comune interazione tra componenti grafiche: per esempio si può facilmente associare il valore di un qualunque controllo, ad esempio una barra di scorrimento, all'attributo di un altro componente (situazione molto comune), come la dimensione di una immagine, o la velocità di una animazione.
Questo è un esempio di piccolo programma JavaFX che mostra in una finestra 250x80 un messaggio di "Hello World!".
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
Stage {
title: "Titolo dell'applicazione"
width: 250
height: 80
scene: Scene {
content: [
Text {
font : Font {
size : 16
}
x: 10
y: 30
content: "Hello World!"
}
]
}
}
Il nome di una classe, ad esempio Font
, seguito da parentesi graffe, come avviene nella notazione JSON, serve per creare un oggetto: all'interno delle parentesi si possono specificare gli attributi dell'oggetto; per es. size: 16
, indica la dimensione dell'etichetta di testo e x: 10
indica la posizione orizzontale del testo rispetto alla finestra.
Per capire la corrispondenza, in Java avremmo scritto:
Font mioFont = new Font();
mioFont.setSize(16);
Text mioText = new Text();
mioText.setFont(mioFont);
mioText.setX(10);
mioText.setY(30);
mioText.setContent("Hello World!");
Le parentesi quadre denotano invece l'inizio di una "Sequenza" (Sequence
), una specie di lista di oggetti alla quale si possono aggiungere/rimuove elementi. Ad esempio:
var miaSequenza : Number = [10, 20, 40];
insert 30 into miaSequenza;
remove 40 from miaSequenza;
crea una sequenza di 3 numeri, e successivamente aggiunge l'elemento "30" e rimuove "40".
Il linguaggio di scripting di JavaFX era originariamente un progetto di Chris Oliver, chiamato F3, ed è stato annunciato per la prima volta da Sun Microsystem alla conferenza JavaOne del maggio 2007. Soltanto un anno dopo, nel maggio 2008, Sun ha annunciato il piano di distribuire JavaFX per desktop entro la fine del 2008, e per i cellulari a metà del 2009, ed ha reso ufficiale la collaborazione con On2 Technologies per incorporare in JavaFX la possibilità di riprodurre alcuni formati video (componente fondamentale per concorrere con Adobe Flash, obsoleto dal 31 dicembre 2020[4]).
A partire dal luglio 2008 è stato possibile scaricare una anteprima di JavaFX per Windows e Macintosh.
Con il nuovo modello di rilascio del progetto JDK, le nuove versioni delle funzionalità sono rilasciate con una cadenza di circa 6 mesi[5]. Ogni versione riceve a sua volta aggiornamenti costanti. Ad esempio la versione 13u ha ricevuto 7 aggiornamenti tra il 2019 e il 2021[6].
Attualmente, JavaFX è un progetto open source sotto il nome di OpenJFX[8]. A partire dalla versione 11, JavaFX è stato reso disponibile come libreria separata dal JDK, distribuita sotto la GNU General Public License versione 2 con Classpath Exception. Questa licenza consente agli sviluppatori di utilizzare, modificare e distribuire JavaFX liberamente, inclusa la possibilità di includere le librerie di runtime nelle loro applicazioni.
Con il passaggio a OpenJFX, il codice sorgente di JavaFX è stato reso disponibile pubblicamente, eliminando la confusione precedente riguardo alla sua licenza. Ora gli sviluppatori possono contribuire attivamente al progetto e beneficiare delle nuove funzionalità e degli aggiornamenti rilasciati dalla comunità.