如何从 javafx 中的事件处理程序返回结果?我有下面的代码,如何从事件返回数据到函数 showPrompt?是否可以恢复事件功能的数据?
public static String showPrompt(String title, String defValue){
final Stage dlgStage = new Stage();
TextField txtPromptValue = new TextField(defValue);
Button btnOk = new Button("Ok");
Button btnCancel = new Button("Cancel");
btnOk.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent arg0) {
//How to return data from event to function?
dlgStage.close();
}
});
btnCancel.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent arg0) {
//How to return data from event to function?
dlgStage.close();
}
});
//
Label lblTitle = new Label(title);
lblTitle.setFont(Font.font("Amble CN", FontWeight.NORMAL, 14));
//
VBox vbox = new VBox(lblTitle,txtPromptValue,btnOk,btnCancel);
vbox.setAlignment(Pos.CENTER);
vbox.setMinSize(300, 200);
//
Scene dlgScene = new Scene(vbox);
//
dlgStage.setScene(dlgScene);
dlgStage.initStyle(StageStyle.UNDECORATED);
dlgStage.initModality(Modality.APPLICATION_MODAL);
dlgStage.setMinWidth(300);
dlgStage.setMinHeight(200);
dlgStage.show();
最佳答案
简短的回答是你不能返回一个值。
为什么?
下面的这段代码称为回调
。
new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent arg0) {
dlgStage.close();
}
}
回调没有返回类型,如您在上面的示例中所见,它是 void
。
回调是作为参数传递给另一个方法的方法。另一个方法会在需要时调用您回调方法。这意味着回调是异步的。
在您的示例中,它会在您按下按钮时调用回调。
总之,您不能使用return
从它返回。
怎么办?
您可以从您的回调 中调用方法并将您的返回
值作为参数 发送给它。
例子:
btnCancel.setOnAction(
new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent arg0) {
YourClass.setReturnValue("This is button Cancel");
dlgStage.close();
}
}
});
其中 setReturnValue
是属于 YourClass
的方法或其实例,因此它将零售您的返回值。
另一种更好的方法可能是创建一个扩展 Stage
的类。同样在您的 showPrompt
方法中,您必须使用 showAndWait()
或类似方法来阻止执行。
总而言之,您不能仅通过一种方法创建整个Prompt
。
关于java - 如何从 javafx 中的事件处理程序返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424542/