Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用setOnAction添加现有处理程序方法_Java_Javafx_Hyperlink_Event Handling_Fxml - Fatal编程技术网

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

Java 使用setOnAction添加现有处理程序方法,java,javafx,hyperlink,event-handling,fxml,Java,Javafx,Hyperlink,Event Handling,Fxml,我想使用setOnAction方法将现有的handleModellAction方法分配给生成的超链接,但我不知道如何执行此操作 下面是我的代码示例:- @FXML private void handleModellAction(ActionEvent event) throws IOException{ FXMLLoader load = new FXMLLoader(getClass().getResource("InEX.fxml")); Parent root = (Par

我想使用
setOnAction
方法将现有的
handleModellAction
方法分配给生成的超链接,但我不知道如何执行此操作

下面是我的代码示例:-

@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);
}
有人知道怎么做吗


非常感谢:)

您可以尝试调用
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);
    }
});
Hyperlink=newhyperlink();
link.setText(“http://example.com");
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent e){
FXMLLoader load=新
FXMLLoader(getClass().getResource(“InEX.fxml”);
父根=(父)load.load();
阶段=新阶段();
舞台场景(新场景(根));
stage.show();
link=(Hyperlink)event.getTarget();
model=link.getId();
舞台剧名(模特);
}
});
而不是定义

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

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

然后,您可以在任何按钮、超链接等中的任何位置使用该
HandleModelAction()

您可以从sceneBuilder内部执行此操作,转到modelHyperLink控件,修改setOnAction参数,或者从fxml文件执行此操作。如果这是修复超链接,则可以执行此操作,但我想在每次单击按钮时将此超链接添加到现有的VBox。所以我必须这样做。你真的不需要,因为它是你每次分配的同一个处理方法,你只需要定义它一次,然后你就可以将它添加到VBox中。我想这比这个复杂。我有一个其他的管理窗口,我想在这里决定切换VBox,我想添加链接。除了这个链接之外,我还想添加一个imageview。但是它可以与下面的答案一起工作:)
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();
            }
        });