java
How to get the current item after the FXML initialization?
I tryed to get the current view of my application and set the item of a menu depending of the view, my fxml looks something like that: <StackPane fx:id="rootNode" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="628.0" prefWidth="1185.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controller.AccountRegistrationController"> <stylesheets> <URL value="#../css/jfoenix-components.css" /> <URL value="#../css/main.css" /> </stylesheets> <children> <BorderPane prefHeight="740.0" prefWidth="1185.0"> <left> <!-- this is my menu--> <fx:include source="Menu.fxml"/> </left> <top> </top> <center> </center> <left> </left> </BorderPane> </children> And my menu looks like this: <VBox fx:id="menu" maxWidth="240.0" prefWidth="240.0" minWidth="240.0" fx:controller="controller.MenuController" xmlns:fx="http://javafx.com/fxml/1" styleClass="menu"> <children> <GridPane> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" maxWidth="14.0" minWidth="14.0" prefWidth="14.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0"/> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" vgrow="SOMETIMES"/> </rowConstraints> <children> <JFXButton fx:id="mnFactories" alignment="TOP_LEFT" prefHeight="35.0" prefWidth="180.0" styleClass="menu-item" text="Fábricas" GridPane.columnIndex="1" onAction="#goTo"/> <FontAwesomeIconView glyphName="INDUSTRY" glyphStyle="-fx-fill: rgb(93, 135, 156)" size="14px"/> </children> </GridPane> <GridPane> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" maxWidth="14.0" minWidth="14.0" prefWidth="14.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0"/> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" vgrow="SOMETIMES"/> </rowConstraints> <children> <JFXButton fx:id="mnProducts" alignment="TOP_LEFT" prefHeight="35.0" prefWidth="180.0" styleClass="menu-item" text="Productos" GridPane.columnIndex="1" onAction="#goTo"/> <FontAwesomeIconView glyphName="SUITCASE" glyphStyle="-fx-fill: rgb(93, 135, 156)" size="14px"/> </children> </GridPane> <GridPane> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" maxWidth="14.0" minWidth="14.0" prefWidth="14.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0"/> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" vgrow="SOMETIMES"/> </rowConstraints> <children> <JFXButton fx:id="mnTags" alignment="TOP_LEFT" prefHeight="35.0" prefWidth="180.0" styleClass="menu-item" text="Tags" GridPane.columnIndex="1" onAction="#goTo"/> <FontAwesomeIconView glyphName="TAG" glyphStyle="-fx-fill: rgb(93, 135, 156)" size="14px"/> </children> </GridPane> <GridPane> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" maxWidth="14.0" minWidth="14.0" prefWidth="14.0"/> <ColumnConstraints hgrow="SOMETIMES" maxWidth="180.0" minWidth="180.0" prefWidth="180.0"/> </columnConstraints> <rowConstraints> <RowConstraints minHeight="10.0" vgrow="SOMETIMES"/> </rowConstraints> <children> <JFXButton fx:id="mnUsers" alignment="TOP_LEFT" prefHeight="35.0" prefWidth="180.0" styleClass="menu-item" text="Usuarios" GridPane.columnIndex="1" onAction="#goTo"/> <FontAwesomeIconView glyphName="USERS" glyphStyle="-fx-fill: rgb(93, 135, 156)" size="14px"/> </children> </GridPane> </children> So now when I clicked for example in "Usuarios" option the class of this item change the class to active-menu-item. First I manage my fxml views with this functions: #FXML public void goTo (ActionEvent evt) { updateActiveItem(((JFXButton)evt.getSource())); } private void updateActiveItem (JFXButton item) { if (item.getStyleClass().contains("active-menu-item")) { // Es la página actualmente mostrada } else { setView(item.getText(), item); } } public boolean setView(String option, Node node) { try { if (Main.getSceneObjects() == null) { System.out.println("No se encontraron los elementos necesarios para cargar la vista"); return false; } else { Parent root = (Parent) Main.getSceneObjects()[0]; Stage stage = (Stage) node.getScene().getWindow() ; switch (option.toLowerCase()) { case "productos": root = FXMLLoader.load(getClass().getResource("../view/fxml/products.fxml")); break; case "tags": root = FXMLLoader.load(getClass().getResource("../view/fxml/tags.fxml")); break; case "usuarios": root = FXMLLoader.load(getClass().getResource("../view/fxml/accountRegistration.fxml")); break; default: System.out.println("La opción seleccionada no existe"); break; } Scene scene = new Scene(root); stage.setScene(scene); stage.show(); setCurrentItem(node); return true; } } catch (IOException ex) { return false; } } And finally set the current option active with this function: public void setCurrentItem (Node node) { for (Node child : menu.getChildren()) { int index = 0; for (Node _child : ((GridPane)child).getChildren()) { if (index == 0) { if (_child.getStyleClass().contains("active-menu-item")) { _child.getStyleClass().remove("active-menu-item"); _child.getStyleClass().add("menu-item"); } } else { if (_child.getClass().toString().contains("class de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView")) { if (((FontAwesomeIconView)_child).getGlyphStyle().contains("-fx-fill: #FFF")) { ((FontAwesomeIconView)_child).setGlyphStyle("-fx-fill: rgb(93, 135, 156)"); } } } index ++; } } node.getStyleClass().add("active-menu-item"); for (Node currentChild : ((GridPane)node.getParent()).getChildren()) { System.out.println("ENTROO en el for del boton"); if (currentChild.getStyleClass().contains("glyph-icon")) { ((FontAwesomeIconView)currentChild).setGlyphStyle("-fx-fill: #FFF"); } } } But when I set the scene, the current active option of the menu no change, what happened?, I need to do something else or this cant work because I use two controllers in every fxml?
Related Links
How can loop continue before method is finished?
Would Statement st=con.CreateStatement() be an example of composition?
Maven error - Glassfish vs Sun Jersey
Parsing data from php page to android
How to handle events from another GUI window in Swing [duplicate]
Insert base64 image to oracle using stored procedure
SOAP Client How to add an Array to the SOAPElement
Add an extra tag or element in Soap Response using Jaxws
Expecting result in test with spring bean
requestPermissions() does NOTHING
Permission is only granted to system apps
How to open a file in new browser window?
Specify android sdk and build tools version for Swagger Codegen
In intelliJ, how to move an method to an implementing class of an interface?
How to check if a location is near a line between to points and coordinates on that line?
NullPointerException when trying to Filter JTable [duplicate]