2017-07-28 5 views
0

Ich möchte eine vorhandene -Methode zu einem generierten Hyperlink mit der setOnAction-Methode zuweisen, aber ich weiß nicht, wie dies zu tun ist.Hinzufügen einer vorhandenen Handler-Methode mit setOnAction

Hier ist mein Code Beispiel: -

@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); 
} 

Kennt jemand, wie dies zu tun?

Vielen Dank :)

+0

Sie es von innen sceneBuilder tun können, gehen Sie in die modelHyperLink Kontrolle, und Sie Ändern Sie den setOnAction-Parameter, oder Sie tun es aus der fxml-Datei. – Calips

+0

Dies würde es tun, wenn dies ein fixer Hyperlink ist, aber ich möchte diesen Hyperlink zu einer bestehenden VBox jedes Mal hinzufügen, wenn ich einen Button klicke. Also muss ich es so machen. – pR4yChaos

+0

Sie müssen nicht wirklich, da es die gleiche Handler-Methode ist, die Sie jedes Mal zuweisen, Sie müssen es nur einmal definieren und dann können Sie es wie gewünscht an die VBox hinzufügen. – Calips

Antwort

1

Sie könnten versuchen, die setOnAction Methode auf dem modelHyperlink und übergeben Sie als Parameter eine anonyme Klasse als Handler zu nennen, wo in Sie die Logik Ihrer handleModellAction Methode übertragen könnte.

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

statt definieren

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

können Sie benutzen Sie einfach: Im Folgenden finden Sie ein Beispiel finden

<HyperLink fx:id="myLink"/> 

Dann im Code: Ihre handleMethod wie dieses Refactoring:

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(); 
    } 

danach:

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

Dann können Sie verwenden, dass handleModellAction() überall Sie in eine beliebige Taste, Hyperlink wollen und so weiter ..

Verwandte Themen