【问题标题】:addign a existing handler method with setOnAction使用 setOnAction 添加现有的处理程序方法
【发布时间】:2018-01-04 03:06:45
【问题描述】:

我想将现有的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);
}

有人知道怎么做吗?

非常感谢:)

【问题讨论】:

  • 你可以在sceneBuilder里面做,你去modelHyperLink控件,你修改setOnAction参数,或者你从fxml文件里做。
  • 如果这是一个修复超链接,就会这样做,但我想在每次单击按钮时将此超链接添加到现有的 VBox。所以我必须这样做。
  • 你真的不需要,因为它是你每次分配的同一个处理程序方法,你只需要定义一次,然后你可以添加它,但是你想添加到 VBox。
  • 我猜它比这更复杂。我有另一个管理窗口,我想在其中决定要添加链接的 VBox。除了这个链接,我还想添加一个图像视图。
  • 但它适用于以下答案:)

标签: java javafx hyperlink event-handling fxml


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    而不是定义

     <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()..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多