Anteprima
Vedrai una selezione di 15 pagine su 68
Appunti Programmazione ad oggetti e Java Pag. 1 Appunti Programmazione ad oggetti e Java Pag. 2
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 6
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 11
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 16
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 21
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 26
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 31
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 36
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 41
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 46
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 51
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 56
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 61
Anteprima di 15 pagg. su 68.
Scarica il documento per vederlo tutto.
Appunti Programmazione ad oggetti e Java Pag. 66
1 su 68
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Interfacce grafiche con JavaFX

JavaFX, che si appoggia alla piattaforma Java, è un linguaggio di scripting dichiarativo e compilato. Il linguaggio offre binding automatici tra i dati, trigger, animazioni ed elementi grafici. Figura 8.1 Anatomia di un'applicazione JavaFX Application è la classe (astratta) principale di un programma JavaFX. Ogni programma JavaFX deve estendere la classe Application. È necessario ridefinire il metodo start() che rappresenta l'entry point dell'applicazione, ovvero è il primo metodo ad essere invocato appena il sistema è pronto: questo metodo prende in input un oggetto di tipo Stage (package javafx.stage). Un'applicazione JavaFX consiste infatti in uno Stage ed in una Scene: - Stage è il contenitore top-level (Top Level Container), e corrisponde alla finestra grafica principale dell'applicazione. - Scene è il contenitore per gli elementi grafici dello Stage e deve sempre essere

inserita all'interno di un oggetto Stage (stage.setScene(scene)). La classe scene, infatti, viene usata per visualizzare il contenuto. Il contenuto della Scene è organizzato in uno Scene graph.

Ogni componente grafico ha un componente padre su cui è posizionato, e zero o più componenti figli posizionati su di esso. In JavaFX ci sono due modi per gestire il posizionamento dei componenti grafici:

  1. Programmaticamente con JavaFX.
  2. Usando il linguaggio dichiarativo FXML per gestire il layout. È possibile creare file FXML anche utilizzando un tool grafico come Scene Builder.

I layout pane (appartenenti al package javafx.scene.layout) sono dei pannelli che hanno un modo predefinito per posizionare i componenti che gli si aggiungono. I più utilizzati sono:

  • VBox e HBox, che rappresentano box verticali e orizzontali, e servono per arrangiare i componenti su di esso rispettivamente su una singola riga o su una singola colonna.
  • GridPane, un pannello

dove è possibile posizionare i vari componenti nelle celle di una griglia immaginaria. Ogni componente, però, può anche coprire l'area di più celle, sia in verticale che in orizzontale.

AnchorPane, per posizionare i componenti in posizione assoluta, specificando le coordinate in pixel. Questo è il layout di default che usa attualmente Scene Builder.

FXML è un linguaggio dichiarativo di markup basato su XML che consente di costruire l'interfaccia utente per le applicazioni JavaFX in maniera indipendente da Java. Questo tipo di gestione permette la separazione tra la parte statica di interfaccia e gli eventuali eventi da gestire su di essa. Un designer può creare del codice direttamente in FXML oppure farsi aiutare da JavaFX Scene Builder per farlo in maniera interattiva tramite un'interfaccia grafica.

Scene Builder è un applicativo che consente di generare del codice FXML

tramite un'interfaccia utente semplice da utilizzare. Il codice può poi essere esportato per essere utilizzato in un ambiente di sviluppo (IDE) tramite il quale lo sviluppatore può aggiungere la logica di funzionamento (Controller). Spesso l'IDE può generare automaticamente un template per il Controller a partire dal codice FXML (Make controller in NetBeans).

19.5 Gestione degli eventi

Nelle applicazioni JavaFX, gli eventi sono notifiche che indicano che qualcosa è accaduto, come quando un utente clicca un bottone, preme un tasto, muove il mouse e via discorrendo. Ogni volta che si verifica un evento, questo viene inviato ai gestori degli eventi (event handlers), seguendo una catena di distribuzione degli eventi (event dispatch chain).

I tipi di eventi sono organizzati in maniera gerarchica.

Figura 9

Per gestione degli eventi si intende la possibilità di associare l'esecuzione di una certa parte di codice in corrispondenza di un certo evento.

occorso sulla GUI. I gestori deglieventi sono oggetti separati dagli oggetti grafici.Il target di un evento può essere un’istanza di qualunque classe che implemental’interfaccia EventTarget.I filtri di eventi o gestori di eventi (entrambi implementano EventTarget) registratiall’interno di un’applicazione ricevono l’evento e rispondono eseguendo una certa azione:Un filtro di eventi viene eseguito durante la fase di “capturing” dell’evento; i filtri sono registrati per il tipo di evento che accade e vengono eseguiti appena l’eventopassa attraverso il nodo che ha registrato il filtro.Un event handler (javafx.event.EventHandler) viene eseguito durante la fase di “bubbling” dell’evento; gli handler sono registrati per il tipo di evento che accade evengono eseguiti appena l’evento attraversa di nuovo il nodo che ha registratol’handler.19.6 PropertiesJava utilizza l’architettura JavaBeans

per rappresentare la proprietà (properties) di un oggetto. Una proprietà è un attributo di una classe che è possibile scrivere e leggere, e per ogni una di queste si definiscono i metodi accessor e mutator, dato che l'attributo viene dichiarato privato. Questo modello consiste sia in un API che in un design pattern vero e proprio, con le proprie naming conventions, supporto per tipi complessi di property ed un sistema di distribuzione degli eventi.

Una property JavaFX viene implementata come una classe wrapper che incapsula un tipo primitivo di Java aggiungendo delle funzionalità aggiuntive:

  • Le classi del package javafx.beans.property supportano nativamente l'osservabilità ed il binding.
  • È possibile associare un gestore di eventi alla proprietà.
  • È possibile associare un oggetto Property ad una variabile d'istanza.
  • Gli attributi dei nodi sono implementati come property.

19.7 Binding

Il binding è un

potente meccanismo che consente di esprimere delle relazioni dirette travariabili. Quando degli oggetti partecipano ad un binding, il cambiamento di uno di essi siriflette sugli altri automaticamente. Più precisamente, se viene aggiornata una proprietà diun oggetto, deve essere aggiornata automaticamente la proprietà dell’altro oggetto.

In una GUI (graphical user interface) il binding può essere utilizzato per sincronizzare glielementi grafici con i dati dell’applicazione sottostante.

19.8 Osservabilità

La binding API definisce un set di interfacce che consente ad alcuni oggetti di esserenotificati non appena si verifica un cambiamento di valore o un’invalidazione.

Le interfacce Observable ed ObservableValue inviano le notifiche di cambiamento, e leinterfacce InvalidationListener e ChangeListener le ricevono:

ObservableValue effettua il wrapping di un valore e notifica il cambiamento a qualunque ChangeListener registrato.

(che non effettua il wrapping di nessun valore) invia le notifiche di cambiamento ad ogni InvalidationListener registrato.

19.9 FXCollections

FXCollections è una classe di utilità che consiste in alcuni metodi statici che rappresentano delle copie uno-ad-uno dei metodi delle collezioni presenti in java.util.Collections. Ad esempio, le interfacce ObservableList ed ObservableMap implementano entrambe Observable ed estendono rispettivamente List e Map, in maniera tale da creare delle liste o mappe osservabili.

19.10 Pattern MVC

Nella creazione delle GUI moderne esiste uno schema architetturale che viene utilizzato molto spesso: il pattern MVC (Model-View-Controller), che definisce una separazione tra i ruoli di un'applicazione. Infatti, nell'MVC, si separano tre componenti a seconda del loro ruolo nell'applicazione:

  • Il Model, che implementa la vera applicazione, e rappresenta un oggetto che trasporta dei dati ma anche le funzionalità

dell'applicazione; può contenere dellalogica applicativa (logica di business) per aggiornare il controller quando i dati cambiano.

La View, che è composta da tutta la parte dell'applicazione con cui si interfaccia l'utente, e rappresenta la visualizzazione dei dati che contiene il modello. La View implementa la logica di presentazione ed espone all'utente le funzionalità dell'applicazione, ma non contiene nessun tipo di funzionalità o dato applicativo.

Il Controller, che implementa la logica di controllo, ed agisce sia su Model che su View, ovvero controlla il flusso di dati nell'oggetto Model ed aggiorna la View appena i dati cambiano; consente di mantenere la View ed il Model separati.

I vantaggi dell'applicazione dell'MVC sono tanti: uno di questi è quello che se deve cambiare l'interfaccia grafica, non deve cambiare l'applicazione.

19.11 FAQ: JavaFX è una realizzazione del

JavaFX consente di progettare applicazioni tramite il pattern MVC, tramite l'utilizzo di Java e FXML:

  • Il Model consiste negli oggetti che sono nel dominio della specifica applicazione.
  • La View è l'FXML.
  • Il Controller è il codice che definisce il comportamento della GUI in relazione all'interazione con l'utente.

La classe Controller serve a far interagire tra loro i componenti della GUI dichiarati nell'interfaccia grafica: si comporta dunque come un mediatore. Controller utilizza l'annotazione @FXML per indicare che l'FXML loader può accedere a quei membri anche se sono privati. Quest'annotazione può essere usata su attributi e metodi ma non su classi o costruttori. Non è necessario utilizzare l'annotazione @FXML su membri pubblici, ma è buona pratica di programmazione farlo: si consiglia di annotare tutti i membri, sia pubblici che privati, per indicare che

servono a gestire un elemento della GUI (aumenta la leggibilità). FileChooser Un file chooser viene utilizzato per aprire una finestra di dialogo che consente di selezionare uno o più file da utilizzare nel controller. Il metodo showOpenDialog() serve a selezionare un file da aprire (in lettura e/o scrittura): restituisce null se non è stato selezionato nessun file. Il metodo showSaveDialog() serve a selezionare un file da salvare, ed anche in questo caso viene restituito null se non è stato selezionato nessun file. Concorrenza in JavaFX Implementare dei compiti molto impegnativi in un'applicazione JavaFX rende inevitabilmente la UI poco responsiva. Una buona pratica di programmazione consiste nell'eseguire questi compiti in thread separati che vengono eseguiti in background, e dunque far gestire all'applicazione JavaFX soltanto gli eventi utente. Sarebbe possibile implementare le azioni in background creando un oggetto Runnable ed assegnarlo a un Thread per l'esecuzione.
Dettagli
A.A. 2020-2021
68 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher daaf37b10f4971d74babdaaff77f26c9f975f601 di informazioni apprese con la frequenza delle lezioni di Programmazione ad oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Salerno o del prof Percannella Gennaro.