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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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