salutaUtente

acquisizione di informazioni inserite dall'utente

foto schermata programma Devi realizzare un programma che presenti una casella di testo per inserire il nome, un testo che indichi all'utente ciò che si deve inserire (appunto, il nome), un pulsante che faccia partire la funzionalità ed in fine un testo che darà un messaggio di saluto contenente il nome indicato. Questo ovviamente solo dopo aver premuto il pulsante.

Organizza la finestra

Il primo passo da fare è creare una nuova finestra con tutti gli oggetti sopra indicati modificando il programma che hai già creato o creandone una copia.

Per risolvere il compito assegnato hai bisogno di poter leggere il contenuto della casella di testo e poter scrivere il contenuto del testo di saluto dopo che la funzionalità start è terminata. Per questo gli oggetti appena indicati si dichiareranno appena sotto la riga contenente class, in modo tale che siano utilizzabili (correttamente si dice visibili) nel resto del programma.

Label messaggio = new Label();
TextField nome = new TextField();

Il tipo Label crea un oggetto di tipo testo col quale l'utente non interagisce (un testo scritto che non può essere modificato), in questo caso il messaggio di saluto mentre il tipo TextField crea un oggetto di tipo casella di testo (o campo testo) nel quale l'utente può inserire i dati. In questo caso il proprio nome.

Label e TextField saranno segnalate come errore perché non si sa a quale oggetto specifico stiamo facendo riferimento mentre il Button non è segnalato come errore perché l'istruzione import che lo riguarda è presente nell'esempio. Per risolvere il problema basta clickare sulla lampadina alla sinistra della riga contenente Label; in questo modo si aprirà un elenco di proposte fornite dall'ambiente di sviluppo per correggere l'errore. Le alternative sono molte e per niente equivalenti: scegli quella che contiene import e javafx. Tale modo di procedere sarà quello che dovrai sempre usare per importare gli oggetti che fanno parte di JavaFX.

All'interno della funzionalità (d'ora in poi le funzionalità verranno chiamate metodi) start vai a dichiarare altri due oggetti che servono al programma: una casella per scrivere un testo e un pulsante (va bene inserirli nella riga dopo alla dichiarazione di start).

Label mettiNome = new Label();
Button eseguiSaluto = new Button();

Quale è il tipo degli oggetti usati per permettere all'utente di inserire dei dati?

Buttonquesto è il pulsante Labelquesto oggetto serve per un testo che l'utente non può modificare TextField Applicationquesto oggetto rappresenta una intera finestra

Anziché inserire questi oggetti in uno BorderPane li inseriremo in un GridPane, cioè un pannello strutturato come una griglia organizzata in righe e colonne nella quale inserire i componenti. Prima di tutto lo dichiariamo (subito dopo le 2 precedenti):

GridPane griglia = new GridPane();

Risolvi l'import come sopra. Ora bisogna impostare il testo visualizzato nei vari oggetti, tranne il campo testo (continua ad inserire le righe sotto alle precedenti):

mettiNome.setText("Nome:");
messaggio.setText("Sono impaziente...");
eseguiSaluto.setText("Premi qui");

per quanto riguarda il TextField anziché mostrare un testo (sempre impostabile col metodo setText), puoi mostrare un suggerimento (in grigio) che scomparirà non appena l'utente inizierà a inserire del testo nella casella:

nome.setPromptText("Nome o nomignolo per salutarti");

Ora che gli oggetti sono pronti non rimane che piazzarli nella griglia e quindi aggiungerli come suoi elementi. Queste operazioni le effettuerai col metodo add(oggetto, numeroColonna, numeroRiga) dell'oggetto GridPane. Fai attenzione al fatto che le righe e le colonne sono numerate progressivamente a partire da 0. La seguente riga di programma (che puoi inserire ancora sotto alle precedenti) mette l'etichetta mettiNome nella prima riga e prima colonna di griglia:

griglia.add(mettiNome, 0, 0);

Se volessi inserire un pulsante chiamato esegui nell'angolo in alto a sinistra del GridPane pannello dovrei scrivere:

pannello.add(esegui, 0, 0); pannello.add(esegui);mancano le coordinate esegui.add(pannello, 1, 1);il nome prima del punto deve essere quello del GridPane

La stessa operazione va svolta per gli altri 3 controlli:

griglia.add(nome, 1, 0);
griglia.add(eseguiSaluto, 1, 1);
griglia.add(messaggio, 1, 2);

Le griglie numerano le righe a partire da

0esatto 1no, non partono da 1 è possibile scegliereno, il valore di partenza è fisso

Nel metodo start modifica la costruzione della variabile scena in modo tale da avere come area griglia e non principale. Vai un po' più giù dove trovi pSaluto.setText("Ciao Mondo!") (all'interno del metodo esegui). E modificala come così:

public void esegui() {
   String utente;
   utente = nome.getText();
   messaggio.setText("Signor " + utente + " Le auguro buona giornata!");
}

In questo metodo possiamo vedere la dichiarazione di una variabile di tipo String chiamata utente (prima riga) nella quale inserirai ciò che ha scritto l'utente. Le variabili di questo tipo servono a contenere dei testi.

Per leggere il contenuto di una casella bisogna usare metodo getText() applicato alla TextField chiamata nome. Nell'ultima riga il testo contenuto in messaggio viene creato concatenando (aggiungendo, uso dell'operatore +) alla costante testo "Signor" il contenuto della variabile utente concatenata alla costante testo "Le auguro una bella giornata!".

A questo punto resta una cosa da fare: il metodo setOnAction che serve a decidere cosa fare quando l'utente preme il pulsante fa riferimento a pSaluto (pSaluto.setOnAction(....) e invece dobbiamo riferirci a eseguiSaluto.

Prova a comporre il tutto e verifica il funzionamento.

Nel programma c'è qualcosa che non serve più (e che quindi potresti eliminare):

principalegiusto, era il vecchio BorderPane ma adesso al suo posto usiamo un GridPane grigliaci serve ancora è l'elemento che contiene i testi, il pulsante e la casella pSalutogiusto, era il vecchio pulsante ma adesso al suo posto usiamo eseguiSaluto

Voglio creare un programma che usa una casella di test ed un pulsante... completa il programma qui sotto:

Button b = new Button("pulsante"); TextField c = new TextField();