Problème de référence et refactoring JavaFX
Bonjour à tous,
J'ai un programme java dont l'affichage est assuré par un ensemble de classe JavaFX. Pour faire communiquer le tout, le programme java a accès à une interface Java (Affichable.java) qui est implémentée par une classe javafx. (DisplayManager.fx)
L'affichage est découpé en 4 parties (4 * 1/4 de l'écran) et à chaque quart de l'écran est associé un CustomNode dans la Scene.
La classe DisplayManager contient donc le code du Stage + le code des méthodes dessinant des chose dans le stage.
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 40 41 42 43 44
|
Stage {
fullScreen: true
title: bind stringTitle
scene: Scene {
....
content: [
Group {
content: bind [
Group{
content: [
...,
module1
]
},
Group{
translateX:desktop.getModuleX(2),translateY:desktop.getModuleY(2)
content: [
....,
module2
]
},
Group{
translateX:desktop.getModuleX(3),translateY:desktop.getModuleY(3)
content: [
...,
module3
]
},
Group{
translateX:desktop.getModuleX(4),translateY:desktop.getModuleY(4)
content: [
...,
module4
]
},
.....
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
var currentPos: Integer;
var module1: CustomNode;
var module2: CustomNode;
var module3: CustomNode;
var module4: CustomNode;
//AffichageA et AffichageB extends CustomNode
public override function displayA(String): Void {
module1 = AffichageA {
texte: String
}
}
public override function displayB(String): Void {
module1 = AffichageB {
texte: String
}
} |
Le code ci-dessus fonctionne mais ne permet d'afficher que dans le module 1.
Je souhaiterai maintenant afficher dans le module dont le numéro correspond à la variable currentPos du code ci dessus (ex : si currPos == 2, on affiche dans le module 2)
Une solution simple mais très inélégante (et qui marche :) ) serait
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public override function displayA(String): Void {
if (currentPos==1){
module1 = AffichageA {
texte: String
}
}else if (currentPos==2){
module2 = AffichageA {
texte: String
}
}else if (currentPos==3){
module3 = AffichageA {
texte: String
}
}else if (currentPos==4){
module4 = AffichageA {
texte: String
}
}
//Et ça pour chaque méthode !!!! Code dupliqué horrible .... |
La deuxième approche a été de créer une méthode intermédiaire (mais ce code ne compile pas alors que "l'équivalent java" serait correct .....)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
function selectedModule(): CustomNode{
if (currentPos==1) return module1;
if (currentPos==2) return module2;
if (currentPos==3) return module3;
if (currentPos==4) return module4;
return null
}
public override function displayA(String): Void {
this.selectModule() = AffichageA{
texte: String
}
}
//Nettement mieux mais ne compile pas ..... |
Je cherche donc une solution pour éviter d'avoir à faire ce que j'ai proposé dans la méthode A qui m'obligerait à dupliquer des dizaines de lignes de codes ...
Merci d'avance