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

Reading stored data in offline mode
Spring JUnit not loading whole applicationContext from XML
Regex to get n number of lines after a match
EJB injected into a task returns UnsatisfiedResolutionException
How to record current X and Y co-ordinates of a Component (like a Button) into a Variable in a JFrameForm in Netbeans
How to delete a directory with guarantee in java / scala
Saving the font from a text pane java
flink + Kafka + JSON
Java API for Vowpal Wabbit?
Proccess command “arp -a” on android?
adding new data to object of superclass to make object of subclass
Oracle ordim jar missing
Java `KeyListener` not working
Android Webview goback with loaddatawithbaseurl
Gmap primefaces not rendering
Gson data storing and retrieving. Storing as String, retrieving as integer

Categories

HOME
testng
listview
blogger
gis
jira
acquia
opengl-es-2.0
qore
add
google-translate
qt-creator
zend-framework3
remote-access
flask-wtforms
progressive-web-apps
transformation
beyondcompare
nhibernate-envers
autoconf
riot.js
sox
wpfdatagrid
bootstrap-material-design
web-api-testing
fifo
elasticsearch-net
saas
msys2
libssl
c++-amp
file-rename
media-queries
pim
avcapturesession
mapdb
appfabric
xcode-extension
ansible-playbook
cookiecutter-django
unoconv
heightmap
gpx
slick-3.0
segment
qwt
nstextview
or-tools
pycaffe
websitepanel
markojs
bluemix-app-scan
energy
ios8-today-widget
prerequisites
lemon
comobject
sframe
0xdbe
responsive-images
php-ci
sankey-diagram
operation
processmodel
dereference
skos
gui-test-framework
winddk
javafx-webengine
navigationservice
undefined-reference
mbr
terminal-services
mysqltuner
page-layout
excel-2003
comaddin
ember-app-kit
rdoc
coderush
labwindows
qtkit
amazon-appstore
removeclass
mercurial-server
hirefire
calling-convention
inotifycollectionchanged
celltable
telerik-scheduler
kdbg
avatar
anti-piracy
project-hosting
signal-handling

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App