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)
前もって感謝します!
まず、user_name
がnullでないことを確認します。そうでない場合は、コードのどこかに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
}
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()
// )
// )
);
さて、これは私がそれをやった方法であり、動作します。
上記のいずれも機能しない場合は、次を試してください。
文字列変数を作成します。たとえば、String username;次に、次を試してください:
if(username.trim().isEmpty())
元の提案は機能しませんでしたが、文字列の作成は機能しました。したがって、上記の提案が機能しない場合は、これを試してみてください。
これは簡単に確認できます
if(textField.getText().trim().equals(""))
{
system.out.println("textField is empty");
}
textField.getText()。trim()。equals( "")
上記の声明は私にとって魅力的なものでした。