2016-01-29 4 views
0

J'ai torturé google avec plusieurs questions, mais je n'arrive toujours pas à faire un point.JAVAFX Scene Builder contrôleurs multiples

Je veux créer une application avec 2 scènes FXML peuplées par SceneBuilder. Chacun a son propre contrôleur. J'utilise ControlledScreen pour échanger des Scènes et cela fonctionne. Mais je ne peux rien changer sur scène. Par exemple: i ont l'étiquette dans le contrôleur Scène:

public class ControllerForm implements ControlledScreen, Initializable { 

    ScreensController myController; 
     GraphicsContext GC; 

     @FXML 
      private Label fitnessLabel; 

public void updateFitnessLabel(double data) { 
       fitnessLabel.setText(String.valueOf(data)); 
      } 

public void initialize(URL location, ResourceBundle resources) { 
      this.GC = neuroCanvas.getGraphicsContext2D(); 
       } 

Il est défini dans le fichier FXML comme:

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="684.0" prefWidth="918.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="general.ControllerForm"> 
    <left> 
     <VBox prefHeight="400.0" prefWidth="189.0" BorderPane.alignment="CENTER"> 
     <children> 
    <Label fx:id="fitnessLabel" text="Label"> 
        <graphic> 
         <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Fitness:" /> 
        </graphic> 
       </Label> 

et la fonction de mise à jour est l'étiquette updateFitnessLabel.

Dans la méthode d'initialisation, j'utilise GC parce que j'ai une toile sur cette scène et que je veux dessiner dessus.

J'ai méthode qui appelle à cette fucntion comme:

public class Net { 
private ControllerForm controller; 

    public void drawStart() throws IOException { 
    FXMLLoader loader = new FXMLLoader(
         getClass().getResource(
           Main.ScreenFile 
         ) 
       ); 

       BorderPane cv = loader.load(); 
       // load actual screen 
       ControllerForm controller = 
         loader.<ControllerForm>getController(); 

       controller.updateFitnessLabel(12);} 

Mais aucun effet. L'étiquette ne sera pas mise à jour.

Que manque-t-il?

J'ai essayé d'utiliser Timeline, mais toujours aucun effet. Comment activer dessiner quelque chose sur cette scène?

+1

Il serait utile si vous pouviez fournir plus de contexte. A quoi ressemble le FXML? Y a-t-il un autre code de contrôleur pertinent? –

+0

Rien de plus n'est pertinent. FXML est standart. Si je dessine quelque chose dans initialize, il semble que le contrôleur fonctionne. – SystemFailure

+0

Sans le FXML et des exemples de code supplémentaires, il sera difficile d'aider à diagnostiquer votre problème. –

Répondre

0

Ok, j'ai trouvé la solution. Loader.load

loader.load renvoie Object. Mais j'ai besoin d'un objet initial pas un nouveau. Utilisé cette réponse - FXMLLoader getController returns NULL?

Ceci n'est pas optimal, mais je n'ai aucune idée de comment obtenir l'objet initial.