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

InvalidSelectorException - Selenium Webdriver support to recognize accent letters
Form validation with Spring Security login page
Python - IPython Notebook fails to find the Java executable
JBehave reuse steps from dependent projects
Spring boot + JPA - SharedEntityManagerCreator opens sessions at startup
Java Two-Dim Array
JAXB XML Required Field Validation
How to handle Activemq's max frame size exception with failover transport
Build fails after updating to gradle 3.3
Correct Threading approach to log analytics
Google Drive API v3 getting root folder Id in java
Rich domain model vs anemic domain model [closed]
Exception in thread “main” java.lang.UnsatisfiedLinkError: no openalprjni in java.library.path
Why i Can't use PDDOCUMENT PDFBOX in java ee project ?
Java, programming a Currency Calculator, stops at first JOptionPane and keeps running
How to get Sum of SQLite Column by matching id

Categories

HOME
ms-access
bluetooth
clips
pypi
debugging
react-virtualized
cplex
elm
spring-jdbc
dxl
installshield
ravendb
in-app-purchase
awesome-wm
dacpac
clearcase-ucm
django-admin
connection-string
object-detection
tar
sox
extjs5
emgucv
angular2-aot
status
nhapi
facebook-apps
primitive
react-chartjs
junit5
preg-match-all
exuberant-ctags
subset-sum
overlap
lto
libraries
hue
ansible-playbook
squib
powershell-dsc
nxlog
modelmapper
businessworks
angular2-meteor
menuitem
appcompat
jquery-validate
datastax-startup
statsd
snmptrapd
boost-preprocessor
pearson
chord-diagram
angular-cache
phishing
bstr
hexdump
system.management
uid
srand
reactive-banana
jms2
cartesian-product
teamcity-8.0
wordml
purge
pundit
ibaction
event-bubbling
graph-api-explorer
skos
truevault
kineticjs
sorl-thumbnail
operator-precedence
nstableviewcell
internet-connection
seaside
cloud-connect
stxxl
industrial
pushbackinputstream
interface-orientation
flashvars
sublist
bitsharp
broken-links
runas
propertyeditor
zpt
subgurim-maps
javax.script
netbeans-7.1
google-friend-connect
fluent-interface
h.323
.nettiers
nhibernate.search
ext3
firefox4
photoshop-cs4
swing-app-framework
eqatec
boost-smart-ptr
privilege
noscript
port-number
geneva-server
wsdl.exe
document-conversion

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