JavaFx将输入控件标记为必填项

JavaFx将输入控件标记为必填项,java,javafx,Java,Javafx,我开始学习JavaFx,所以我决定做一个小的实践项目来证明我的知识。因此,我遇到了这样一种情况,在这种情况下,我寻找一种可能性,可以轻松禁用按钮,直到正确填充其他以前的输入控件(例如:textfield) 我已经知道JavaFx或Java中的事件监听器,但我不确定如何实现事件监听器,这解决了我的问题 我寻找一个解决方案,但我没有找到,所以希望有人有一个想法如何解决它 到目前为止,, DanielEventListener不是根据屏幕上其他节点的状态处理禁用按钮和其他控件的正确方法。您应该使用绑定

我开始学习JavaFx,所以我决定做一个小的实践项目来证明我的知识。因此,我遇到了这样一种情况,在这种情况下,我寻找一种可能性,可以轻松禁用按钮,直到正确填充其他以前的输入控件(例如:textfield)

我已经知道JavaFx或Java中的事件监听器,但我不确定如何实现事件监听器,这解决了我的问题

我寻找一个解决方案,但我没有找到,所以希望有人有一个想法如何解决它

到目前为止,,
Daniel

EventListener不是根据屏幕上其他节点的状态处理禁用按钮和其他控件的正确方法。您应该使用绑定。这是一个带有两个文本字段的示例屏幕。顶部的按钮必须是非空的,底部的按钮必须有一个数值才能启用。对于那些不喜欢禁用按钮的人,我在底部添加了一条带有错误消息的文本,其可见性与按钮的启用/禁用状态相关联:

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class ButtonDisable extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        TextField textField1 = new TextField();
        TextField textField2 = new TextField();
        Button button = new Button("Click Me");
        Text errorText = new Text("Field 1 must have a value, Field 2 must have a numeric value");
        button.disableProperty()
              .bind(Bindings.createBooleanBinding(() -> checkTextfields(textField1.getText(), textField2.getText()),
                                                  textField1.textProperty(),
                                                  textField2.textProperty()));
        errorText.visibleProperty().bind(button.disabledProperty());
        primaryStage.setScene(new Scene(new VBox(10, textField1, textField2, button, errorText), 400, 200));
        primaryStage.show();
    }

    private boolean checkTextfields(String text1, String text2) {
        return (text1.isEmpty() || !isNumeric(text2));
    }

    private static boolean isNumeric(String str) {
        try {
            Double.parseDouble(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}

您需要为按钮定义一个事件监听器,该按钮在单击时检查所有输入字段,如果一个字段不正确,则显示错误,这可能是实现事件监听器或检查输入字段的问题?也许您可以在这里找到答案:禁用提交按钮不是一个特别好的用户界面设计。用户不会凭直觉知道如何启用它。相反,考虑在按下该按钮时显示一个错误对话框,或者在每个字段旁边出现一个特定的验证消息,输入错误/缺失,每当按钮出现时更新。NIT-PICK:不要使用PARSUBION进行转换——它在大多数区域中都会失败: