Tutorial operativo per costruire un'app desktop Java decente: struttura pulita,
run/debug affidabile, controlli base, eventi e consegna senza panico.
1
Cosa devi saper fare per una GNI
JavaFX non serve per fare effetti speciali: serve per consegnare una piccola
applicazione desktop funzionante. L'obiettivo realistico e' saper aprire una finestra,
organizzare i controlli, leggere input, reagire ai click e tenere il progetto Maven
eseguibile anche su un altro PC.
Base solidaJDK 17+, Maven, struttura standard e classe che estende Application.
Logica separataNon mettere tutto nel bottone: crea classi modello e metodi chiari.
GNI
Per una gara conta piu' un'app semplice, stabile e leggibile che una GUI enorme.
Punta a una schermata principale completa, validazione input e salvataggio dati se richiesto.
Quiz veloce
Qual e' la priorita' in una prova pratica?
2
Installazione minima: JDK, Maven, IDE
Prima della gara verifica questi comandi da terminale. Se falliscono, l'IDE puo'
sembrare rotto anche quando il progetto e' corretto.
Verifica ambiente
# Java: usa JDK 17 o superiorejava -versionjavac -version# Maven: deve rispondere senza errorimvn -version
Componente
Cosa installare
Errore tipico
JDK
Temurin/OpenJDK 17 o 21
JAVA_HOME punta a una JRE o a un JDK vecchio.
Maven
Maven 3.8+
mvn non e' nel PATH.
IntelliJ
Community va bene
Project SDK non impostato.
VSCode
Extension Pack for Java
Workspace aperto nella cartella sbagliata.
Comandi gara
Cambia comando e controlla l'output atteso.
3
Progetto Maven: struttura giusta
Maven vuole una struttura precisa. Se la rispetti, IntelliJ, VSCode e terminale
vedono lo stesso progetto.
Incolla qui il tuo pom.xml: il checker verifica gli elementi minimi.
4
Prima app JavaFX senza FXML
Per una gara conviene partire senza FXML: meno file, meno magia, debug piu' diretto.
Quando sei sicuro puoi aggiungere Scene Builder, ma non serve per una prova decente.
package it.zuc.gni;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
publicclassAppextends Application {
privatefinal ListView<String> risultati = new ListView<>();
@Override
publicvoidstart(Stage stage) {
TextField nome = new TextField();
nome.setPromptText("Nome studente");
TextField punti = new TextField();
punti.setPromptText("Punti");
Button aggiungi = new Button("Aggiungi");
aggiungi.setOnAction(event -> aggiungiRisultato(nome, punti));
HBox form = new HBox(8, nome, punti, aggiungi);
VBox root = new VBox(12, new Label("Classifica GNI"), form, risultati);
root.setPadding(new Insets(16));
stage.setTitle("GNI JavaFX");
stage.setScene(new Scene(root, 640, 420));
stage.show();
}
privatevoidaggiungiRisultato(TextField nome, TextField punti) {
if (nome.getText().isBlank() || punti.getText().isBlank()) {
new Alert(Alert.AlertType.WARNING, "Compila entrambi i campi").showAndWait();
return;
}
risultati.getItems().add(nome.getText() + " - " + punti.getText() + " punti");
nome.clear();
punti.clear();
}
publicstaticvoidmain(String[] args) {
launch(args);
}
}
Errore comune
Se vedi "JavaFX runtime components are missing", non lanciare la classe con il pulsante Java generico:
usa mvn javafx:run o configura l'IDE per usare il goal Maven.
5
IntelliJ e VSCode: stesso progetto, due flussi
Il progetto deve funzionare prima da terminale. Poi l'IDE diventa solo un aiuto per
scrivere, completare e fare debug.
IntelliJ IDEA Community
Apri la cartella che contiene pom.xml con File > Open.
Quando IntelliJ chiede se importare Maven, accetta.
Controlla File > Project Structure > Project SDK: deve essere JDK 17+.
Apri il pannello Maven, espandi Plugins > javafx e lancia javafx:run.
Per debug: crea una Run Configuration Maven con command line javafx:run.
Configurazione Maven in IntelliJ
Run > Edit Configurations > + > MavenWorking directory: cartella del progetto
Command line: javafx:run
JRE: Project JDK 17+
Visual Studio Code
Installa Extension Pack for Java e Maven for Java.
Apri la cartella radice del progetto, non il singolo file Java.
Attendi "Importing Maven projects". Se non parte, usa Java: Clean Java Language Server Workspace.
Nel pannello Maven lancia Plugins > javafx > javafx:run.
Se il pulsante Run sopra main fallisce, non e' grave: per JavaFX usa Maven.
Se IntelliJ/VSCode non trova JavaFX ma mvn javafx:run funziona, cosa controlli?
6
Schema da usare in gara
Quando arriva una traccia, non partire dalla grafica. Parti dai dati e dalle azioni.
Poi costruisci una finestra che permetta di usare quelle azioni.
Fase
Cosa fare
Output concreto
1. Modello
Identifica entita' e campi.
Studente, Squadra, Risultato.
2. Logica
Scrivi metodi senza JavaFX.
aggiungi, cerca, ordina, calcolaTotale.
3. GUI
Collega campi e bottoni ai metodi.
TextField, ComboBox, TableView.
4. Validazione
Blocca input vuoti o numeri non validi.
Alert chiaro e nessun crash.
5. Consegna
Prova da terminale pulito.
mvn clean javafx:run riuscito.
Controlli JavaFX da conoscere
Label: testo statico.
TextField e TextArea: input breve o lungo.
Button: azione con setOnAction.
ComboBox<T>: scelta da elenco.
ListView<T>: elenco semplice.
TableView<T>: dati tabellari, utile per classifiche e gestionali.
VBox, HBox, BorderPane, GridPane: layout base.
Strategia
Se il tempo stringe, consegna una GUI meno bella ma completa: input, lista dati,
operazione principale, messaggio di errore e istruzioni per esecuzione.
7
Quiz finale
Controllo rapido prima di usare il tutorial come traccia di ripasso.
1. Quale comando deve funzionare da terminale per eseguire il progetto?
2. Dove va il codice sorgente principale?
3. Quale plugin lancia JavaFX con Maven?
4. In gara, dove conviene mettere la logica di dominio?
5. Quale controllo e' piu' adatto a una classifica tabellare?
6. Se il Run dell'IDE fallisce ma Maven funziona, cosa fai?