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

Per risolvere il problema dovrai creare una finestra con tutti gli oggetti sopra indicati (modificando il programma che hai già creato o creandone una copia). Se ne deduce che 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 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 inserisci dati. In questo caso il proprio nome.

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

Mentre Button non sarà segnalato come errore, lo sarà Label. Questo perché mentre il Button è stato importato in automatico perchè l'istruzione per farlo è presente nell'esempio, il Label no. Per risolvere il problema basta clickare sulla lampadina alla sinistra della riga contenente Label; in questo modo si aprirà un elenco di possibilità proposte da dall'ambiente di sviluppo. 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.

Anziché inserire questi oggetti in uno StackPane 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 scrivere col metodo:

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). 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 il testo nella prima riga e prima colonna e contemporaneamente aggiunge mettiNome come figlio di griglia:

griglia.add(mettiNome, 0, 0);

Se volessi inserire un pulsante chiamato esegui nell'angolo in alto a sinistra del GridPane pannellodovrei 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

Le stesse operazioni vanno svolte 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 dichiarazione di scene in modo tale da avere come area griglia e non root. Vai un pò più giù dove trovi btn.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 stringa di testo chiamata utente (prima riga) nella quale inserisci ciò che ha scritto l'utente. Questo è possibile grazie al metodo getText() applicato alla TextField chiamata nome. 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 btn (btn.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):

rootgiusto, era il vecchio StackPane ma adesso al suo posto usiamo un GridPane grigliaci serve ancora è l'elemento che contiene i testi, il pulsante e la casella btngiusto, 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();