VBox中的TextFields

时间:2018-06-11 23:43:38

标签: javafx

我有一个记录列表和两种TextField s:填充和空。我将它们放在VBox

for (int i = 0; i < records.size(); i++) {
    if (records.get(i).contains("NEW")) {
        TextField fillField = new TextField();
        vbox.getChildren().add(fillField);
    } else {
        TextField filledField = new TextField();
        filledField.setEditable(false);
        filledField.setText(records.get(i));
        vbox.getChildren().add(filledField);
    }
}

在此之后,用户可以填写免费的TextField。如何在VBox内更新它们?

然后我想检查它们中的任何一个是否为空(如何?),在这种情况下,我将用"true"填充它们。

编辑: 所以我这样做:

for (int i = 0; i < vbox.getChildren().size(); i++) {
     if (((TextField) vbox.getChildren().get(i)).getText()==null) {
         TextField filledField = new TextField("true");
         ((TextField) vbox.getChildren().get(i)).setText("true");
         //System.out.println(((TextField)vbox.getChildren().get(i)).getText()); 
     }
}

我的问题是,当我在控制台中打印时,当字段为空时,我会看到true。但在我的申请中,该领域仍然是空的。 更新所有字段后,是否需要更新vbox或其他内容?

1 个答案:

答案 0 :(得分:0)

如果您将属性设置为此值,则TextField的文字只会变为null。这是一个坏主意,因为您需要检查null和空字符串(后者是添加一些字符并从TextField删除它们的结果)。

在这种情况下,最简单的解决方案是不要这样做并使用String.isEmpty进行检查:

for (String record : records) {
    TextField textField = new TextField();
    if (!record.contains("NEW")) {
        textField.setEditable(false);
        textField.setText(record);
    }
    vbox.getChildren().add(textField);
}
for (Node child : vbox.getChildren()) {
    TextField tf = (TextField) child;
    if (tf.getText().isEmpty()) {
        tf.setText("true");
    }
}