Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Näkymät

Näkymän vaihtaminen samassa ikkunassa

Näkymän vaihtaminen samassa ikkunassa on tärkeä osa monen JavaFX-sovelluksen toimintaa. Näkymien välillä voi siirtyä ilman uuden ikkunan avaamista.

Alla yksinkertainen esimerkki, jossa on kaksi näkymää: MainView ja SecondaryView. Painikkeella pääsee toiselle näkymälle, ja toisella painikkeella takaisin.

Juju on tämä: Asetamme nykyisen Scene-olion juurisolmuksi uuden näkymän. Näin ikkunan koko ja muut ominaisuudet säilyvät, mutta sisältö vaihtuu.

main.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.VBox?>

<VBox xmlns:fx="http://javafx.com/fxml" fx:controller="fi.jyu.ohj2.esimerkit.MainController">
    <Button text="Toiseen näkymään" onAction="#siirryToiseenNakymaan"/>
</VBox>

Näkymän vaihtaminen ikkunassa

Jos näkymien välillä on tarvetta välittää tietoa, se voidaan toteuttaa näkymän lataamisen yhteydessä seuraavasti. Tässä MainController lähettää viestin SecondaryController-oliolle, joka tulostaa sen konsoliin initialize()-metodissaan. Täysin vastaavasti voitaisiin välittää tieto myös takaisin päin.

MainController.java
public class MainController  {
    @FXML
    private void siirryToiseenNakymaan(ActionEvent event) throws Exception {
        FXMLLoader loader = new FXMLLoader(App.class.getResource("secondary.fxml"));
        loader.setControllerFactory(_ -> new SecondaryController("Moikka"));
        Parent secondaryRoot = loader.load();
        Scene currentScene = ((Node) event.getSource()).getScene();
        currentScene.setRoot(secondaryRoot);
    }
}