我写了一个小JavaFX应用程序来说明我的问题。我有一组checkBoxes和一个TextField,它们都包含在一个Vbox中,它是在应用程序启动时构造的。我希望检查的复选框被添加到列表中,我设法做到了,但对于TextField,我没有得到它。当我在文本字段中键入文本时,所有字符都添加到列表中,但我希望立即添加整个文本。 这是我的代码来说明我的意思。
package sample;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.*;
public class Controller implements Initializable {
public VBox mainVb;
List<String> categories = new ArrayList<>();
List<String> checked = new ArrayList<>();
@Override
public void initialize(URL location, ResourceBundle resources) {
categories();
}
public void categories() {
categories.add("Condition 1");
categories.add("Condition 2");
categories.add("Condition 3");
categories.add("Condition 4");
categories.add("Condition 5");
categories.add("Condition 6");
categories.add("Condition 7");
categories.add("Condition 8");
checked.add("Condition 2");
checked.add("Condition 3");
checked.add("Condition 6");
for (int i = 0; i < categories.size(); i++) {
CheckBox checkBox = new CheckBox();
checkBox.setText(categories.get(i));
if (checked.contains(categories.get(i))) checkBox.setSelected(true);
checkBox.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (checkBox.isSelected()) checked.add(checkBox.getText());
if (!checkBox.isSelected()) checked.remove(checkBox.getText());
}
});
mainVb.getChildren().add(checkBox);
}
TextField textArea = new TextField();
textArea.setPromptText("Other...");
textArea.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
checked.add(textArea.getText());
}
});
mainVb.getChildren().add(textArea);
}
public void seeChecked(ActionEvent event) {
System.out.println(checked);
}
}
如果我进入&#34;你好&#34;在TextField中,它添加了&#34; h&#34; &#34;他&#34; &#34; HEL&#34; &#34;地狱&#34; &#34;你好&#34;在我的清单中。如何添加&#34;你好&#34;马上。
非常感谢你。 皮尔。
答案 0 :(得分:1)
使用setOnAction而不是textProperty已更改
textArea.setOnAction(e -> checked.add(textArea.getText()));
输入&#34; hello&#34; 后,按