0

. Chaque fois qu'un label/bouton est cliqué, le volet doit basculer vers le fichier fxml correspondant. Donc, en d'autres termes, le volet doit toujours être dans la même position, un peu comme une mise en page avec onglets mais sans onglets. Je sais que je peux y arriver en chargeant simplement une nouvelle instance d'un fichier fxml, mais je veux éviter cela car lorsqu'un utilisateur clique sur un onglet sur lequel il était auparavant, il devrait pouvoir voir son entrée précédente.JavaFX, basculer les volets dans une fenêtre racine et de conserver la mémoire

J'ai un main.java qui démarre le programme. Un certain controller.java qui contrôle l'interface utilisateur lors de son premier chargement, et un fichier fxml correspondant à cette vue initiale. Comment puis-je mettre en œuvre cette fonctionnalité de transition? P.S. Je suis très novice à JavaFX.

+0

Vous voulez passer à un volet d'un simple clic? – c0der

+0

oui mais ce commutateur ne doit pas supprimer l'entrée dans le volet précédent lorsque vous passez au suivant. L'utilisateur devrait pouvoir aller et venir et voir la même entrée. En outre, il ressemble plus à un design d'onglet si vous pouvez l'imaginer. Mais je préférerais ne pas utiliser d'onglets. – compute

+0

Chargez simplement les trois fichiers FXML une fois et conservez les références aux interfaces utilisateur chargées (et aux contrôleurs si vous en avez besoin). –

Répondre

0

Voici un MCVE de comment vous pouvez y parvenir.
Il peut bien entendu être mis en œuvre à l'aide FXML:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextArea; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class StageTest extends Application{ 

    private Pane pane1, pane2, mainPane; 

    @Override 
    public void start(Stage stage) throws Exception { 

     stage.setTitle("Switch Panes"); 
     Button button1 = new Button("Show Pane 1"); 
     button1.setOnAction(e -> showPane1()); 
     Button button2 = new Button("Show Pane 2"); 
     button2.setOnAction(e -> showPane2()); 

     HBox buttonsPane = new HBox(5.); 
     buttonsPane.getChildren().addAll(button1, button2); 

     pane1 = getPane("PANE ONE"); 
     pane2 = getPane("PANE TWO"); 
     mainPane = new StackPane(pane1); 

     BorderPane root = new BorderPane(); 
     root.setTop(buttonsPane); 
     root.setCenter(mainPane); 

     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 


    private void showPane1() { 
     mainPane.getChildren().clear(); 
     mainPane.getChildren().add(pane1); 
    } 

    private void showPane2() { 
     mainPane.getChildren().clear(); 
     mainPane.getChildren().add(pane2); 
    } 

    private Pane getPane(String txt) { 

     VBox pane = new VBox(); 
     pane.getChildren().addAll(new TextArea(txt+" add text here: ")); 
     return pane; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

oui mais mon fichier fxml est lié uniquement avec la classe de contrôleur. J'ai donc besoin de gérer les boutons pour changer de classe de contrôleur et ça ne me laissera pas faire ça. – compute

+0

Pouvez-vous réellement le démontrer avec des fichiers FXML? – compute