2017-07-28 4 views
0

Je souhaite affecter une méthode handleModellAction existante à un lien hypertexte généré avec la méthode setOnAction, mais je ne sais pas comment procéder.ajouter une méthode de gestionnaire existante avec setOnAction

Voici mon exemple de code: -

@FXML 
private void handleModellAction(ActionEvent event) throws IOException{ 
    FXMLLoader load = new FXMLLoader(getClass().getResource("InEX.fxml")); 
    Parent root = (Parent) load.load(); 
    Stage stage = new Stage(); 

    stage.setScene(new Scene(root)); 
    stage.show(); 

    link = (Hyperlink) event.getTarget(); 
    model = link.getId(); 

    stage.setTitle(model); 
} 

public void addNeuesModell(String bauart, String modelName){ 
    modelHyperlink = new Hyperlink(); 
    modelHyperlink.setId(modelName); 
    modelHyperlink.setText(modelName); 
    modelHyperlink.setOnAction(#handleModellAction); 
} 

Est-ce que quelqu'un sait comment faire cela?

Merci beaucoup :)

+0

vous pouvez le faire à l'intérieur sceneBuilder, vous allez au contrôle modelHyperLink, et vous modifiez le paramètre setOnAction, sinon vous le faites à partir du fichier fxml. – Calips

+0

Cela le ferait si c'est un lien hypertexte, mais je veux ajouter ce lien hypertexte à une VBox existante chaque fois que je clique sur un bouton. Donc je dois le faire comme ça. – pR4yChaos

+0

Vous n'en avez pas vraiment besoin, puisque c'est la même méthode de gestion que vous affectez à chaque fois, vous avez juste besoin de la définir une fois et ensuite vous pouvez l'ajouter comme vous le voulez à la VBox. – Calips

Répondre

1

Vous pouvez essayer d'appeler la méthode setOnAction sur la modelHyperlink et passer en tant que paramètre une classe anonyme en tant que gestionnaire, où vous pouvez en transférer la logique de votre méthode handleModellAction. Ci-dessous vous trouverez un exemple:

Hyperlink link = new Hyperlink(); 
link.setText("http://example.com"); 
link.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent e) { 
     FXMLLoader load = new 
     FXMLLoader(getClass().getResource("InEX.fxml")); 
     Parent root = (Parent) load.load(); 
     Stage stage = new Stage(); 

     stage.setScene(new Scene(root)); 
     stage.show(); 

     link = (Hyperlink) event.getTarget(); 
     model = link.getId(); 

     stage.setTitle(model); 
    } 
}); 
0

au lieu de définir

<HyperLink fx:id="myLink" onAction="#handleModelAction"/> 

vous pouvez utiliser simplement:

<HyperLink fx:id="myLink"/> 

Puis dans le code: refactorisons votre handleMethod comme ceci:

private void handleModellAction() throws IOException { 
     FXMLLoader load = new FXMLLoader(getClass().getResource("InEX.fxml")); 
     Parent root = load.load(); 
     Stage stage = new Stage(); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
    } 

après:

myLink.setOnAction(action -> { 
      try { 
       handleModellAction(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }); 

Ensuite, vous pouvez utiliser cette handleModellAction() partout où vous voulez dans le bouton tout, lien hypertexte et ainsi de suite ..