2017-07-28 47 views
0

我想將已有的handleModellAction方法分配給生成的具有setOnAction方法的超鏈接,但我不知道如何執行此操作。使用setOnAction爲現有處理程序方法添加對齊

這裏是我的代碼示例: -

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

是否有人知道如何做到這一點?

感謝很多:)

+0

你可以從裏面sceneBuilder做到這一點,你去modelHyperLink控制,和你修改setOnAction參數,或者從fxml文件中執行。 – Calips

+0

如果這是一個修復超鏈接,這將做到這一點,但是我想每次敲擊一個按鈕時將這個超鏈接添加到現有的VBox中。所以我必須這樣做。 – pR4yChaos

+0

您並不需要,因爲它是每次分配相同的處理程序方法,您只需定義一次,然後可以將其添加到VBox中。 – Calips

回答

1

你可以試着呼籲modelHyperlinksetOnAction方法並傳遞作爲參數的匿名類的處理程序,在那裏你可以將您handleModellAction方法的邏輯。下面你可以找到一個例子:

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

,而不是定義

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

你可以使用:在代碼

<HyperLink fx:id="myLink"/> 

然後: 重構你的handleMethod這樣的:

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

後:

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

然後你就可以使用handleModellAction()任何你想要的任何按鈕,超鏈接等..

相關問題