Код не очень хорошо написан.Просто подумайте, насколько похож код для всех дней.Зачем повторяться, вместо того чтобы придумать подходящую структуру данных, которая позволит вам более удобно получать доступ к объектам?Зачем создавать 2 x 7 TextField
s, если вы можете создать 2 и использовать цикл для повторения процесса?
Еще одна вещь, которую вам нужно сделать, - это на самом деле сохранить день недели в вас Appointment
.
Реализация open
в следующем коде предполагает, что содержимое списка date
уже содержит правильные значения, даже если в настоящее время код восстанавливает только последние переданные значения, если пользователь редактирует TextField
s..
private ArrayList<Appointment> date = new ArrayList<Appointment>();
public static class Appointment {
final DayOfWeek day;
final String tiempo;
final String d;
Appointment(String tiempo, String d, DayOfWeek day) {
if (Character.isDigit(tiempo.charAt(0)) && tiempo.endsWith("a") || tiempo.endsWith("p")) {
this.tiempo = tiempo;
} else {
throw new IllegalArgumentException("First input must be numeric and a for am" + "p for pm");
}
this.d = d;
this.day = day;
}
}
public void submit() {
// add appointment for each entry in the map
inputs.forEach((day, inputs) -> {
date.add(new Appointment(inputs[0].getText(), inputs[1].getText(), day));
});
}
public void open() {
// clear fields
inputs.values().stream().flatMap(Arrays::stream).forEach(TextField::clear);
// set text for all elements of date
date.forEach(appointment -> {
TextField[] fields = inputs.get(appointment.day);
fields[0].setText(appointment.tiempo);
fields[1].setText(appointment.d);
});
}
public void clear() {
date.clear();
}
private final Map<DayOfWeek, TextField[]> inputs = new EnumMap<>(DayOfWeek.class);
@Override
public void start(Stage primaryStage) {
Button submit = new Button("Submit");
submit.setStyle("-fx-background-color: #00ff00");
submit.setOnAction(event -> submit());
Button open = new Button("Open");
open.setOnAction(event -> open());
Button clear = new Button("Clear");
clear.setStyle("-fx-background-color: #ff0000");
clear.setOnAction(event -> clear());
GridPane grid = new GridPane();
grid.setVgap(10);
Locale locale = Locale.ENGLISH;
TextStyle textStyle = TextStyle.FULL;
Insets headerMargin = new Insets(0, 0, 0, 20);
// add inputs and label for days starting with sunday and store inputs in map
for (int i = 0; i < 7; i++) {
DayOfWeek day = DayOfWeek.SUNDAY.plus(i);
Label label = new Label(day.getDisplayName(textStyle, locale));
GridPane.setMargin(label, headerMargin);
TextField timeField = new TextField();
TextField dField = new TextField();
inputs.put(day, new TextField[] { timeField, dField });
grid.addColumn(i, label, timeField, dField);
}
HBox buttonContainer = new HBox(10, clear, open, submit);
buttonContainer.setAlignment(Pos.TOP_RIGHT);
VBox.setMargin(buttonContainer, new Insets(0, 20, 0, 0));
VBox root = new VBox(10, grid, buttonContainer);
Scene scene = new Scene(root, 600, 300);
primaryStage.setTitle("Appoinment Calendar");
primaryStage.setScene(scene);
primaryStage.show();
}