Как проверить, пуст ли textfield?
для моего приложения JavaFx я хочу проверить, пусты ли текстовые поля, и если да, предупредите пользователя. Это текстовые поля:
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.handle(Opdracht1.java:103)
at opdracht1.Opdracht1.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.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.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.access00(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$handleMouseEvent5(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$null9(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
спасибо заранее!
6 ответов
прежде всего, проверьте, если user_name
не null. Если это не так, вы устанавливаете null текстовое значение для компонента JavaFX где-то в вашем коде.
if(user_name.getText().trim().isEmpty()){
в любом случае, применяя trim()
до null value-это то, что вызывает ваше исключение. Вам это не понадобится (см. Улук Бийкомментарий к этому ответу), но учитывая, что вы создали user_name
TextField, вы должны проверить во-первых, если getText()
метод не null.
что-то вроде этого должно сделать трюк:
if (user_name.getText() == null || user_name.getText().trim().isEmpty()) {
// your code here
}
хорошо, вот как я это сделал, и это работает.
Если в случае, если ни одна из вышеперечисленных работ не работает, попробуйте следующее:
создайте строковую переменную, скажем String username; Затем попробуйте следующее:
if(username.trim().isEmpty())
исходное предложение не сработало для меня, но создание строки сделало, поэтому, если вышеуказанные предложения не сработали для вас, дайте этому шанс.
Это можно проверить, просто
if(textField.getText().trim().equals(""))
{
system.out.println("textField is empty");
}
вы можете использовать кнопку 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()
// )
// )
);
вы можете проверить этот код заменить имя моих чемпионов на имя вашего 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"); }