2014-09-12 3 views
0

Ce que je veux faire est de redimensionner la taille de la scène (la fenêtre de l'application), je veux redimensionner le contenu de la fenêtre en conséquence. J'ai posté mon code que je l'ai fait jusqu'à présentAccéder à la méthode du contrôleur fxml à partir du chargeur fxml

La classe chargeur

public class ResizingButtons extends Application { 

@Override 

public void start(Stage stage) throws Exception { 

    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    scene.widthProperty().addListener(new ChangeListener<Number>() { 

     @Override 
     public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 
      try{ 
      System.out.println("Scene Width Property is " + scene.getWidth()); 
      } 
      catch(Exception e){ 
       System.out.println("Error in width listener of scene" +e.getMessage()); 
      } 
     } 
    }); 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    launch(args); 
    } 
} 

Et ceci est le contrôleur de la classe FXMLDocument.fxml de FXML

public class FXMLDocumentController implements Initializable { 

@FXML 
public Button btn1; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
}  

public void changeBtnSize(){ 
    btn1.setPrefHeight(200); 
    btn1.setStyle("-fx-background-color:red"); 
    } 
} 

Lorsque la taille de la fenêtre est redimensionnée, je veux accéder à la méthode changeBtnSize() de la classe du contrôleur.

Répondre

1

Vous pouvez obtenir l'instance de contrôleur à partir de FXMLLoader. Factoriser votre code comme ceci:

@Override 
public void start(Stage stage) throws Exception { 
    FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); // Use loader instance 
    Parent root = loader.load(); 
    FXMLDocumentController controller = loader.getController(); // Now you have controller refference here 
    //add your listener, feel free to use your controller inside listener implementation 
} 
+0

Maintenant, je suis face à problème chaque fois que je tente de faire des changements dans les composants FXML, de méthode ChangeListener() de la classe du chargeur, il donne null 'scene.widthProperty recueil HSC () .addListener (nouveau ChangeListener () { @Override public void changé (ObservableValue observables, numéro OLDVALUE, numéro newValue) {{ essayer controller.resizeComponents();} prises (Exception e) { System.out.println (e.getMessage()); } } }); 'code' – viper

+0

@viper S'il vous plaît, fournir des détails sur l'erreur reçue – SimY4

+0

quand j'ai essayé d'appeler une méthode de contrôleur, à partir de l'écouteur de changement de classe loader, il exécute des instructions d'impression mais donne une null si j'ai essayé d'apporter des modifications dans le composants de FXML scene.widthProperty(). addListener (nouveau ChangeListener () { @Override public void changé (ObservableValue observable, numéro oldValue, numéro newValue) {try { controller.resizeComponents () // le contrôleur est l'objet de fxmlcontroller } // code dans le contrôleur public void resizeComponents() { System.out.println ("hi"); acPane.setMinSize (300, 400); } – viper

Questions connexes