Я пытаюсь создать простой контрольный список с датами начала, который отвечает ползунку времени, в котором указана дата.
У каждой задачи есть дата начала.
Каждый флажок задачи должен отображаться, только если истек срок начала задачи.
Контрольный список выглядит так при инициализации
Как мне обновить контрольный список для ответа на ползунок времени?
Я понимаю, что мне нужно где-то добавить слушателя или сделать вызов, чтобы обновить элементы пользовательского интерфейса в сцене где-нибудь, но яне знаю, с чего начать.
Я пытался обновить список, использованный для создания, но он не обновляет элементы пользовательского интерфейса, поскольку они уже созданы.
ProjectChecklist.java
public class ProjectChecklist extends Application {
Group root = new Group();
Scene scene = new Scene(root, 600, 300);
VBox vbox = new VBox();
HBox hbox = new HBox();
ScrollPane scrollPane = new ScrollPane();
taskList = getAllTasks(PROJECT_FILENAME);
todayDate = LocalDate.now();
sliderStartDate = taskList.get(0).getStartDate();
LocalDate sliderEndDate = taskList.get(taskList.size() - 1).getEndDate();
long days = ChronoUnit.DAYS.between(sliderStartDate, sliderEndDate);
long daysFromToday = ChronoUnit.DAYS.between(sliderStartDate, todayDate);
slider = new Slider(0, days, 1);
slider.setValue(daysFromToday);
sliderValue = new Label(LocalDate.now().toString());
slider.setMajorTickUnit(1);
slider.setShowTickLabels(true);
scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);
scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
double daysValue = Math.round(newValue.doubleValue());
LocalDate newDate = (sliderStartDate.plusDays((long) daysValue));
slider.setValue(daysValue);
sliderValue.setText(newDate.toString());
}
int taskNumber = 1;
for (ChecklistTask task : taskList) {
if (!task.getStartDate().isAfter(todayDate)) {
CheckBox newCB = new CheckBox();
newCB.setText("task " + taskNumber++ + ": " + task.getDescription());
vbox.getChildren().add(newCB);
}
}
vbox.getChildren().add(slider);
vbox.getChildren().add(sliderValue);
hbox.getChildren().add(vbox);
hbox.setSpacing(40);
hbox.setPadding(new Insets(10, 10, 10, 10));
scrollPane.setContent(hbox);
scrollPane.setPrefSize(600, 300);
scrollPane.setFitToHeight(true);
root.getChildren().add(scrollPane);
primaryStage.setTitle("Bennington checklist");
primaryStage.setScene(scene);
}
public static void main(String args[]) {
launch(args);
runApplication();
}
ChecklistTask.java
import java.time.LocalDate;
import java.util.UUID;
public class ChecklistTask{
private UUID id;
private String description;
private LocalDate startDate;
private LocalDate endDate;
public ChecklistTask() {
this.id = UUID.randomUUID();
}
public UUID getId() {
return id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
}