Identificare lo Stage corrente in JavaFX

Mattepuffo's logo
Identificare lo Stage corrente in JavaFX

Identificare lo Stage corrente in JavaFX

JavaFX ha una struttura un pò particolare quando si parla di layout e controller.

Quando siamo appunto nel controller, di default, non sappiamo nulla dello Stage corrente.

E' possibile recepirlo in diversi modi.

Io mi sono trovato bene così: prima di tutto impostiamo un id nel componente top del nostro file FXML:

<VBox fx:id="uno" 
xmlns="http://javafx.com/javafx/8.0.112" 
xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="com.mp.testfx.ControllerUno">
.....................
</VBox>

Poi, nel controller, possiamo fare una cosa del genere:

public class ControllerUno {

    @FXML
    VBox uno;

    @FXML
    private void onBtnClicked() throws IOException {
        Stage ss = (Stage) uno.getScene().getWindow();
        ss.setIconified(true);
    }

}

Un altro modo, che non è un granchè però, è questo:

public class ControllerUno {

    @FXML
    private void onBtnClicked(ActionEvent event) throws IOException {
        Stage thisStage = (Stage)((Node)event.getSource()).getScene().getWindow();
        thisStage.setIconified(true);
    }

}

Ma andiamo ad usare ActionEvent quasi inutilmente.

Infine, mi è stato consigliato di usare FXMLLoader, non passando per il metodo statico load.

Ma non l'ho provato.

Enjoy!


Condividi

Commentami!