Sectioaurea3 ha scritto:
Purtroppo però usando il mio codice, la figura non viene aggiornata. Mentre se inserisco un testo (chiamato text ) e nella ActionEvent inserisco text.setText("nuova parola") allora il testo viene aggiornato. Come mai?
Il vero problema è che parti dal presupposto sbagliato, cioè che: se assegni un nuovo oggetto ad una TUA variabile (di istanza) della TUA classe, ti aspetti che qualcosa debba accadere a video.
No, non è così che funzionano le cose. In JavaFX ma anche in qualunque altro framework es. AWT o Swing.
Quello che si vede a video è il risultato di una struttura (ad "albero") fatta di tanti "nodi" (tutte le estensioni di javafx.scene.Node) che ha come "radice" lo Stage, che è il contenitore
top level (di più alto livello) in JavaFX.
Come vedi, per creare quella struttura hai fatto una serie di operazioni, su un hbox1 hai preso la lista dei children ("figli") che appena creato il HBox è inizialmente vuota e gli hai aggiunto 3 nodi figli. E così per il resto.
Per cambiare qualcosa a video a seguito di un evento quindi ci sono diverse possibilità. La più semplice: cambiare una proprietà di un nodo. Ad esempio una proprietà come il "text" di un componente che mostra del testo.
Se all'inizio metti:
Rectangle r= new Rectangle(50,50);
e poi nel handle() metti:
r.setWidth(r.getWidth() + 10);
Ad ogni click su Cerchio, il rettangolo si espande in larghezza. In questo caso NON hai cambiato quella struttura ad albero ma solo una caratteristica di un nodo già presente nella struttura.
Dato che nel handle hai "visibilità" della variabile border di tipo BorderPane, se nel handle metti:
border.setCenter(new Circle(20,20,20));
Allora vai a cambiare in piccola parte quella struttura ad albero, cioè uno dei sotto-nodi del BorderPane diventa un Circle invece che il vecchio Rectangle.
Tutto chiaro, adesso?