changer d'ecrans en cliquant sur un item d'un arbre (treeview)
Bonjour,
Comment puis je faire pour changer de scene ou lancer un nouvel ecran
Voici le contrôleur où est instanciée l'arbre:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public void initialize(URL location, ResourceBundle resources)
{
loadItems();
}
@SuppressWarnings("unchecked")
public void loadItems()
{
TreeItem<String>root=new TreeItem<>("Root");
TreeItem<String> clients=new TreeItem<>("Clients");
TreeItem<String> addClient=new TreeItem<>("Add Client");
TreeItem<String> seeClient=new TreeItem<>("See clients");
TreeItem<String> articles=new TreeItem<>("Articles");
TreeItem<String> devis=new TreeItem<>("Devis");
root.getChildren().addAll(clients,articles,devis);
clients.getChildren().addAll(addClient,seeClient);
root.setExpanded(true);
treeview.setRoot(root);
treeview.setShowRoot(false);
} |
Le controleur est appelé par le main MainApp.java où sont chargées les fichiers FXML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| @Override
public void start(Stage primaryStage) {
this.primaryStage=primaryStage;
mainMenuView();
}
public void mainMenuView()
{
try
{
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/menuView.fxml"));
AnchorPane menuView=(AnchorPane)loader.load();
rootView.setCenter(menuView);
MenuViewController controller = loader.getController();
controller.setMainApp(this);
TreeLoadingEventHandler Tree=new TreeLoadingEventHandler(controller);
Tree.handle(null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
private class TreeLoadingEventHandler implements EventHandler<ActionEvent> {
private MenuViewController controller;
TreeLoadingEventHandler(MenuViewController controller) {
this.controller = controller;
}
@Override
public void handle(ActionEvent t) {
controller.loadItems();
}
} |
Comment faire pour changer de FXML en cliquant sur un noeud de l'arbre ? Par exemple si je clique sur "Add Client" de l'arbre , je souhaiterai qu'un nouveau fichier FXML "AddClient.fxml" soit chargé au niveau de MainApp.java
Merci d'avance de votre aide
changer d'ecrans en cliquant sur un item d'un arbre (treeview)
Salut,
Merci pour ta réponse. J'ai cherché mais je bloque toujours.
Voilà j'ai ajouté une fonction dans ma fonction main MainApp.java
une fonction qui contient un fxml qui doit être chargée quand je clique sur le noeud "Voir mes clients"
de l'arbre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public void mainMenuView()
{
try
{
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/menuView.fxml"));
menuView=(AnchorPane)loader.load();
rootView.setCenter(menuView);
MenuViewController controller = loader.getController();
controller.setMainApp(this);
//controller.loadItems();
TreeLoadingEventHandler Tree=new TreeLoadingEventHandler(controller);
Tree.handle(null);
}
catch(Exception e)
{
e.printStackTrace();
}
} |
La référence du main est appellé par le contrôleur MenuViewController.java
Code:
1 2 3 4
|
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
} |
Je peux ainsi créer une fonction qui appelle selectViewClient créée dans le main
Code:
1 2 3 4
| public void selectViewClient()
{
mainApp.showClient();
} |
puis j'ai ajouté une cell factory dans ma classe MenuViewController.java
qui contient l'implémentation du treeview entre autres.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| private void setfactoryCell()
{
treeview.setCellFactory(tree -> {
TreeCell<String> cell = new TreeCell<String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
if (empty) {
setText(null);
} else {
setText(item);
}
}
};
cell.setOnMouseClicked(event -> {
if (! cell.isEmpty()) {
TreeItem<String> treeItem = cell.getTreeItem();
// do whatever you need with the treeItem...
if (treeItem.getValue().equals("Voir mes clients"))
{
selectViewClient();
}
}
});
return cell ;
});
} |
Pour finir la fonction setfactoryCell() est appelée dans la fonction loadItems()
qui implémente l'arbre.
Code:
1 2 3 4 5 6 7
| public void loadItems()
{
.
.
.
setfactoryCell();
} |
Malheureusement celà ne fonctionne toujours pas.
Et en plus l'arbre ne réagit plus aux clics
Où peut bin se trouver mon erreur ?