【问题标题】:How to use setOnAction event on javafx如何在 javafx 上使用 setOnAction 事件
【发布时间】:2019-07-17 10:51:33
【问题描述】:

我想验证文本字段是否为空或不使用 javafx。

我对事件处理程序感到困惑。我想确认: - setOnAction 是否有多种使用方式:

submit.setOnAction((new EventHandler<MouseEvent>() { 
     public void handle(MouseEvent event) { 
        System.out.println("Hello World"); 
     } 
    }));

submit.setOnAction(e -> handle(e));

这两种选择有什么区别?

  • 第二选择是否不能使用ActionEvent submit.setOnAction(e -> handle()); 但是定义 e 的目的是什么?

我想验证我的应用程序中的文本字段。

public class AppGUI extends Application{

public static void main(String[] args)
{
    launch();
}


public void start(Stage topView)
{
    createUI(topView);
}

private void createUI(Stage topView)
{
    TextField name = TextField();
    Button submit = new Button("Submit");
    submit.setOnAction(e -> validate());
}
private boolean validate()
{
   // if textfield is empty, return false. else, return true. 
}

我在这里迷路了。如果 setOnAction 中的 e 不用于 validate 可以吗?如何将文本字段的值传递给 validate()?使文本字段私有变量是唯一的方法吗? (因为我有这么多的文本字段,我想知道它是否是一个不错的选择)。 在 createUI 方法中,我如何判断 validate() 是否返回 false,显示错误消息,如果为 true,则执行其他操作? 谢谢,打扰了

【问题讨论】:

    标签: javafx eventhandler


    【解决方案1】:

    这两种选择有什么区别?

    在第二个选项中使用lambdas(从 Java 8 开始出现)

    那么定义 e 的目的是什么?

    对于按钮,您的方法具有类似 setOnAction(EventHandler&lt;ActionEvent&gt; handler) 的签名,您应该看到 EventHandler tutorialsActionEvent javadoc。例如,从 e 中您可以通过这种方式获取最初发生事件的对象e.getSource()

    验证时不用e也可以。

    要传递文本字段的值,您的方法应该有这样的签名

    boolean validate(String text);
    

    代码示例:

    private void createUI(Stage topView){
      TextField name = TextField();
      Button submit = new Button("Submit");
    
      submit.setOnAction(e -> {
          boolean validated = validate(name.getText());
          if(validated) System.out.println("validated"); 
      }
    }
    
    private boolean validate(String text){
      return text != null && !text.isEmpty();
    }
    

    【讨论】:

    • 如何继续检查 validate 返回的值并执行其他操作?
    • 我建议指向EventHandler 的文档,而不是ActionEvent,因为它包含与本例相关的接口结构。
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多