使用setOnAction添加现有的处理程序方法

时间:2017-07-28 06:57:19

标签: java javafx hyperlink event-handling fxml

我想使用handleModellAction方法将现有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);
}

有人知道怎么做吗?

非常感谢:)

2 个答案:

答案 0 :(得分:1)

您可以尝试在setOnAction上调用modelHyperlink方法,并将匿名类作为参数传递给处理程序,您可以在其中传输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);
    }
});

答案 1 :(得分: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() ..