web-dev-qa-db-ja.com

テキストフィールドが空かどうかを確認する方法は?

javaFxアプリケーションでは、TextFieldsが空かどうかを確認し、空の場合はユーザーに警告します。これらは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");

今のところ、1つのテキストフィールドで検証をテストしたいだけです。これは、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)

前もって感謝します!

8
user3660293

まず、user_namenullでないことを確認します。そうでない場合は、コードのどこかにnullテキスト値をJavaFXコンポーネントに設定しています。

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

いずれにしても、trim()null値に適用すると、例外が発生します。これは必要ないはずです(この回答に対するluk Biyのコメントを参照)が、user_name TextFieldを作成したことを考慮して、getText()メソッドがnot null

このような何かがトリックを行う必要があります:

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

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()
    //     )
    //  )

);
2
Prayag Sharma

さて、これは私がそれをやった方法であり、動作します。

上記のいずれも機能しない場合は、次を試してください。

文字列変数を作成します。たとえば、String username;次に、次を試してください:

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

元の提案は機能しませんでしたが、文字列の作成は機能しました。したがって、上記の提案が機能しない場合は、これを試してみてください。

2
reece8765

これは簡単に確認できます

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

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

上記の声明は私にとって魅力的なものでした。

0
AnkUser