Я написал небольшое приложение JavaFX, которое иллюстрирует мою проблему. У меня есть набор checkBoxes и TextField, все они завернуты в Vbox, который создается при запуске приложения. Я бы хотел, чтобы checkBoxes, которые были проверены, добавлены в список, который мне удалось сделать, но для TextField я его не получаю. Когда я ввожу текст в текстовое поле, все символы добавляются в список, но Я хочу, чтобы весь текст был добавлен сразу. Вот мой код, чтобы проиллюстрировать, что я имею в виду.Добавить содержимое 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);
}
}
Если я вхожу «привет» в TextField, он добавляет «час», «он» «Хель», «ад», «привет» в моем списке. Как добавить «привет» сразу.
спасибо. Pierre.
Это природа «изменилась» событие. Все, что напечатано или удалено в TextField, вызывает это событие. То, что вы, возможно, захотите попробовать, - это событие keyPress и набирать, когда нажата клавиша ввода, указывающая конец ввода данных в TextField. – DevilsHnd