【问题标题】:How to check if textfield is empty?如何检查文本字段是否为空?
【发布时间】:2015-12-28 06:56:27
【问题描述】:

对于我的 JavaFx 应用程序,我想检查 TextFields 是否为空,如果是,请提醒用户。 这些是文本字段:

VBox fields = new VBox();  
Text usernametext = new Text("User name");
TextField user_name = new TextField();
Text firstnametext = new Text("First name");
TextField first_name = new TextField();
Text lastnametext = new Text("Last name");
TextField last_name = new TextField();
Text ibantext = new Text("IBAN");
TextField iban = new TextField();
Text passwordtext = new Text("Password");
TextField password = new TextField();
Text confirmpasstext = new Text("Confirm password");
TextField confirmpass = new TextField();
Button createBtn = new Button("Create account");

现在我只想在一个文本字段上测试验证。这是我链接到 createBtn 的验证函数:

public void validation(){                

    if(user_name.getText().trim().isEmpty()){
        Alert fail= new Alert(AlertType.INFORMATION);
        fail.setHeaderText("failure");
        fail.setContentText("you havent typed something");
        fail.showAndWait();
    } else {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setHeaderText("Succes");
        alert.setContentText("Account succesfully created!");
        alert.showAndWait();
    }
}

但我在按下“创建帐户”按钮时收到此错误消息:

Exception in thread "JavaFX Application Thread" 

java.lang.NullPointerException
    at opdracht1.Opdracht1.validation(Opdracht1.java:36)
    at opdracht1.Opdracht1$2$1.handle(Opdracht1.java:103)
    at opdracht1.Opdracht1$2$1.handle(Opdracht1.java:98)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(GlassViewEventHandler.java:388)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)

提前致谢!

【问题讨论】:

  • 你能说出Opdracht1.java的第36行吗?
  • @ItachiUchiha if(user_name.getText().trim().isEmpty()){
  • 那么预计user_name为空。检查您的代码,您可以将其设置为 null,或者您可能有多个同名变量。
  • 一种使用正则表达式 (!inputField.getText().matches(" {" +inputField.getText().length() + "}");) 的方法作为额外信息.

标签: javafx textfield


【解决方案1】:

首先,检查user_name 是否不是null。如果不是,您正在代码中的某处为 JavaFX 组件设置 null 文本值。

if(user_name.getText().trim().isEmpty()){

在任何情况下,将trim() 应用于 null 值是导致异常的原因。您不应该需要这个(请参阅 Uluk Biy 对此答案的评论),但考虑到您创建了一个 user_name TextField,您必须首先检查 getText() 方法是否不是 null

这样的事情应该可以解决问题:

if (user_name.getText() == null || user_name.getText().trim().isEmpty()) {
     // your code here
}

【讨论】:

  • user_name.getText() 不能为空,因为TextField 的默认构造函数将初始文本设置为“”(空字符串)。
  • 完全正确。但是他必须在程序的某处设置一个空值;这是在上述行中获取空指针的唯一方法。
  • 如果为 setText() 传递的参数为空,则 "" 设置为文本。所以 getText() 确保无论如何都不返回 null 。如果给定行的 user_name 也为空,则发生 NPE。
  • user_name.setText(null); Assert.assertNotNull(user_name.getText()); 检查这个。它启动一个AssertionFailedError,意味着该方法返回的文本为空。我正在编辑答案,增加了 user_name 也可能为空的可能性。
  • 你是对的。似乎有一个标志来指示文本为空。但是 text 属性的实际值设置为 ""。
【解决方案2】:

这可以通过简单的检查

if(textField.getText().trim().equals(""))
{
system.out.println("textField is empty");
}

【讨论】:

    【解决方案3】:

    您可以测试此代码,将我的冠军名称替换为您的 TextFeild 的名称

    if ((nom_pt.getText().toString().compareTo("") == 0) ||
        (prenom_pt.getText().toString().compareTo("") == 0) ||
        (cin_pt.getText().toString().compareTo("") == 0) ||
        (gsm_pt.getText().toString().compareTo("") == 0)) {
    
        JOptionPane.showMessageDialog(null, "champs vide");
    
    } else {  JOptionPane.showMessageDialog(null, "Enregistrement a été  ajouter");  }
    

    【讨论】:

    • 这个问题是关于JavaFx 而不是Java Swing
    【解决方案4】:

    您可以使用 Button disableProperty 与 TextField 绑定。当文本字段为空时,按钮将被禁用,否则它将被启用。

    使用下面提到的代码

    createBtn.disableProperty().bind(
        Bindings.createBooleanBinding( () -> 
            user_name.getText().trim().isEmpty(), user_name.textProperty()
        )
        // If you want to check more text field, use it as by removing comments
        //.or(  Bindings.createBooleanBinding(
        //         first_name.getText.trim().isEmpty(), first_name.textProperty()
        //     )
        //  )
    
    );
    

    【讨论】:

      【解决方案5】:

      好的,我就是这样做的,而且效果很好。

      如果以上方法均无效,请尝试以下操作:

      创建一个字符串变量,比如说字符串用户名; 接下来,尝试以下操作:

      if(username.trim().isEmpty())
      

      最初的建议对我不起作用,但创建字符串确实如此,所以如果上述建议对您不起作用,请试一试。

      【讨论】:

      • 我猜你的意思是if(username.getText().trim().isEmpty())
      【解决方案6】:

      textField.getText().trim().equals("")

      上面的陈述对我来说就像一个魅力。

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 2014-07-28
      • 2016-11-04
      • 2012-12-29
      • 2021-07-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多