JavaFX如何检查所有动态添加的文本字段是否为空

约翰·字节(John Byte):

我有一个TextField和两个连续的按钮。一个按钮(“添加按钮”)添加TextField的另一行和另一对添加和删除按钮,另一按钮删除该行。当前行是唯一行时,删除按钮被禁用,因此不能有行。

仅当当前行的文本字段不为空并且它是最后一个文本字段时,才启用添加按钮。因此,除了最后一行,每一行都有一个禁用的“添加按钮”。

现在我的问题是如何将“添加按钮” disableProperty绑定到存在的所有文本字段,并检查它们是否为空。事实上,我认为我只需要检查最后一个文本字段,如果它为空,那么我将禁用最后一个“添加按钮”。 。

我找到了一种解决方法,将按钮绑定到文本字段,然后如果我添加另一行,则取消绑定按钮,禁用它,如果删除一行,则仅启用最后一个按钮,然后再次将其绑定到文本字段。这个解决方案似乎很笨拙,我想知道是否有一个更优雅的带有属性绑定的解决方案。

我的代码(具有解决方法,因此您可以看到我想要做什么):

public class Controller {
@FXML
private VBox VBox;

public ObservableList<TextField> oList = FXCollections.observableArrayList();
public ObservableList<Button> bList = FXCollections.observableArrayList();

public void initialize(){
    createRow();
}

private void createRow(){
    HBox box = new HBox(10);
    TextField textField = new TextField();
    Button addButton = new Button("Add row");
    Button deleteButton = new Button("Delete");
    box.getChildren().addAll(textField, addButton, deleteButton);
    VBox.getChildren().add(box);

    oList.add(textField);
    bList.add(addButton);

    addButton.disableProperty().bind(Bindings.isEmpty(textField.textProperty()));

    addButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {
            addButton.disableProperty().unbind();
            createRow();
            textField.setDisable(true);
            addButton.setDisable(true);
        }
    });

    deleteButton.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent actionEvent) {

            int idx = oList.indexOf(textField);
            oList.remove(idx);
            bList.remove(idx);
            VBox.getChildren().remove(idx);

            for(TextField tf : oList){
                int i = oList.indexOf(tf);
                if(oList.size()-1 == i){
                    tf.setDisable(false);
                    bList.get(i).disableProperty().bind(Bindings.isEmpty(tf.textProperty()));
                }
            }


        }
    });

}

}

还有两个屏幕截图:

添加了4行,所有“添加按钮”均已禁用,最后一个BC文本字段中未写入任何内容

在这里,我删除了test1行,并且空行和所有“添加按钮”仍被禁用,除了最后一个,因为在文本字段中有文本

谢谢你的帮助!

PS:我知道我的代码中没有ObservableList,但是我正在尝试并允许它们进入,因为我忘记了...

多发性硬化症 :

BooleanExpression如果TextField列表中的所有s为空,可以创建一个返回true的请注意,您需要重新创建该表达式作为ObservableList<TextField>'change 的内容

oList.addListener((ListChangeListener<? super TextField>) c -> {
    addButton.disableProperty().unbind();
    BooleanExpression allEmpty = oList.stream()
            .map(tf -> BooleanExpression.booleanExpression(tf.textProperty().isEmpty()))
            .reduce(new SimpleBooleanProperty(true), BooleanExpression::and);
    addButton.disableProperty().bind(allEmpty);
});

每次TextField添加或删除内容时,TextField列表中的每个内容都会映射到that BooleanExpressionempty属性TextField然后,所有表达式将被合并在一起。

Note: The same way can also be done using a loop instead of a stream.

Note: You need to add this listener before adding any element to the list.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查我视图中的所有文本字段是否为空c

如何快速检查文本字段是否为空

检查文本字段是否为空

检查collectionView中的文本字段是否为空

检查文本字段是否为空Swift

通过jquery检查文本字段是否为空

如何使if语句来检查是否全部或只是一个文本字段为空

如何快速检测文本字段是否为空?

Rails检查模型以查看所有字段是否为空

如何检查haskell记录中的所有Maybe字段是否全部为空?

如何检查IBM WCM内容中的RTF文本字段的值为空

如何在添加/删除文本字段中获取所有文本字段的值并形成JSON

添加文本字段时,Flutter屏幕显示为空

如何从所有文本字段获取所有值

如何检查动态列名是否为空

检查所有输入是否为空

如何检查ManyToMany字段是否为空?

如何检查输入字段是否为空

不要将所有文本字段更新为 firebase

如何检查文本输入是否为空

添加布尔字段与检查字段是否为空?

使用Struts验证程序,我可以检查所有字段是否为空吗?

当所有文本字段在SwiftUI中都具有值时,如何动态更新屏幕上的标签?

如何使输入文本字段采用所有可用宽度?

填充所有文本字段时如何启用按钮

如何快速从视图中获取所有文本字段

我正在通过jQuery动态添加文本字段,并且文本字段的ID没有增加

向所有序列化程序的所有文本字段添加通用验证

如何检查具有特定字段名称的所有对象是否为真?