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