当前位置: 首页 > 知识库问答 >
问题:

在javaFX中验证TextField数组

南门飞
2023-03-14

在我的程序中,我有一个加减按钮,可以增加或减少文本字段的数量。现在我想做的是在所有字段都被填充后打开一个新面板。我遇到的问题是,如果我只填写其中一个文本字段并单击验证按钮,即使其他文本字段为空,它也会转到下一个面板。

    stage = primaryStage;

    pane = new BorderPane();
    pane.setStyle("-fx-background: #CEF6D8;");

    centerPane1 = new Pane();

    GridPane mainGrid = new GridPane();
    mainGrid.setPadding(new Insets(150, 0, 0, 100));
    mainGrid.setVgap(50);

    // ADULTS, CHILDREN AND INFANT GRID
    noPassGrid = new GridPane();
    noPassGrid.setHgap(10);

    plus = new Button("+");
    plus.setMinWidth(50);
    plus.setFont(Font.font("Verdana", 20));
    GridPane.setConstraints(plus, 1, 0);

    plus.setOnAction(e -> {
        plus(count);
        getArraySize();
    });

    count = new Label("1");
    count.setFont(Font.font("Verdana", 20));
    GridPane.setConstraints(count, 2, 0);

    minus = new Button("-");
    minus.setMinWidth(50);
    minus.setFont(Font.font("Verdana", 20));
    GridPane.setConstraints(minus, 3, 0);

    minus.setOnAction(e -> {
        minus(count);
            getArraySize();
    });


    noPassGrid.getChildren().addAll(plus, count, minus);

    GridPane.setConstraints(noPassGrid, 0, 2);

    mainGrid.getChildren().addAll(noPassGrid);


    search = new Button("SEARCH");
    search.setPrefSize(300, 100);
    search.setFont(new Font("Verdana", 30));
    grid = new GridPane();
    grid.setPadding(new Insets(150, 0, 0, 450));
    grid.setVgap(20);
    grid.setHgap(20);

    test = new Label();
    test.setFont(Font.font("Verdana", 20));
    test.setLayoutX(500);
    test.setLayoutX(100);



    search.setOnAction(e -> {

        for(int i=0; i<arrayLength; i++) {
            passName[i] = new TextField();
            passName[i].setFont(Font.font("Verdana", 20));
            passName[i].setPromptText("Enter Name");
            GridPane.setConstraints(passName[i], 2, i);

            grid.getChildren().addAll(passName[i]);
        }
    });

    verify = new Button("VERIFY");
    verify.setPrefSize(300, 100);
    verify.setFont(new Font("Verdana", 30));

    verify.setOnAction(e -> {
        for(int i=0; i<arrayLength; i++) {
            if(passName[i].getText().equals("")) {
                test.setText("INCORRECT");
            }
            else {
                center2 = new Pane();
                pane.setCenter(center2);
            }
        }
    });


    centerPane1.getChildren().addAll(mainGrid, grid, test);
    pane.setCenter(centerPane1);

    bottom1 = new AnchorPane(verify, search);
    bottom1.setPadding(new Insets(0, 0, 100, 0));
    AnchorPane.setRightAnchor(search, 150.0);
    AnchorPane.setLeftAnchor(verify, 150.0);
    pane.setBottom(bottom1);

    scene = new Scene(pane, 1200, 600);
    stage.setScene(scene);
    stage.show();

}


public void getArraySize() {
    arrayLength = counter;
    passName = new TextField[arrayLength];
}

public void plus(Label l) {
    if(counter < 8) {
        counter++;
        l.setText("" + counter);
    }
}

public void minus(Label l) {
    if(counter > 1) {
        counter--;
        l.setText("" + counter);
    }
}

你能告诉我我的代码有什么问题吗?

谢谢Marco

共有1个答案

邹山
2023-03-14

问题出在验证按钮的逻辑上,如果至少填充了一个文本字段,您的按钮将使窗格出现,另一方面,您希望仅在所有文本字段都填充时才显示窗格,因此您应该这样做:

verify.setOnAction(e -> {
    boolean valid = true; // Variable to store whether the inputs are filled
    for(int i=0; i<arrayLength; i++) {
        if(passName[i].getText().equals("")) {
            valid = false;
        }
    }

    if(valid) {
        center2 = new Pane();
        pane.setCenter(center2);
    } else {
        test.setText("INCORRECT");
    }
});
 类似资料:
  • 问题内容: 谁能告诉我如何在内验证? 我需要它来防止用户单击“保存”,除非同时输入了两个字段。 到目前为止,这是我的代码: 这是我用于验证电子邮件字段的功能: 问题答案: 这可以通过扩展:

  • 我正在使用LostFocus事件验证两个文本字段,如下所示: 我的问题是,当我在第一个文本字段上失去焦点并将焦点移到第二个文本字段时,两个字段都会打印错误消息(两个lostfocus事件下的IF块内的消息)当我在第一个文本字段中输入错误并将焦点移到第二个字段时,它应该只打印第一个文本字段的错误消息。但这两种方法都存在打印错误。 第一个文本字段是文本。没有第二个文本字段是文本。手机没有

  • 问题内容: 我正在使用JavaFX 2.2项目,使用TextField控件时遇到问题。我想限制用户将输入到每个TextField的字符,但是我找不到属性或类似maxlength的东西。存在同样的问题,可以通过这种方式解决。如何解决JavaFX 2.2的问题? 问题答案: 这是在通用文本字段上完成工作的更好方法: 除了该“撤消”错误外,它的工作原理非常完美。

  • 我有1个“viewelements”-类,1个控制器和1个fxml-文件。 ViewElements-Class包含FXML的元素,如按钮和文本字段。Controller-Class包含业务逻辑。 我试图更新文本字段“TextFieldDateIausWaeHlen”,我想将文件的路径设置到文本字段中,但我的方法不起作用。 我的错误在哪里?

  • 我在javafx中有一个TextField是在FXML中创建的。它链接到一个名为“thesholdbox”的变量(如下所示,实例化不显示)。我有一个监听KeyEvents的字段,但是每当我在字段中输入值时,“gettext()”总是返回一个空字符串。 Java代码: FXML:

  • 我构建了一个用于显示数据的小JavaFX TableView。用户应该能够在桌面视图中编辑数据。问题是:某些字段只允许特定值。如果用户输入了错误的值,则该字段设置为0。 这是我的班级: 所以当我编辑一个tableviewcell并输入“q”(这个值是不允许的)并按Enter时,调试器在上面的catch块中跳转,将观察列表中的特定值设置为0(我可以在调试器中看到这一点,当我展开这个对象时)但是tab