java - 如何从 javafx 中的事件处理程序返回结果?

标签 java javafx

如何从 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/

相关文章:

java - 如何在不使用 LinearLayout 的情况下使用 Android 以编程方式为 Spinner 分配权重?

java - 在 Android 中将 PDF 作为电子邮件附件发送

java - 使用 Mockito 模拟具有泛型参数的类

java - 在 JavaFX 中使用 JavaScript 调用 java。是否可以?

java - 不断检查时间线是否停止 - 触发操作

Java do-while 在其自己的类的方法内循环

java - 在 libGDX 中是否有 JavaFX 的 PathTransition 等价物?

java - 如何在 JavaFX 中设置按钮的坐标?

java - 使用线程发出数据库请求

java - 在 Spring Boot 中使用 MDC 或任何过滤器屏蔽日志消息中的密码,而不使用 logback.xml 文件