Wybór określonej wartości z listy Java

0

Pytanie

Staram się stworzyć program planowania, w której będę mógł aktualizować podczas spotkań z klientami. Mogę zapisać swoje spotkania, a ich aktualizacja jest trochę mylące.

Mam 2 listy do godzin i minut, które umieszczam w połączeniu, jak pokazano poniżej.

ObservableList hoursList = FXCollections.observableArrayList();
    hoursList.add("08");
    hoursList.add("09");
    hoursList.add("10");
    hoursList.add("11");
    hoursList.add("12");
    hoursList.add("13");
    hoursList.add("14");
    hoursList.add("15");
    hoursList.add("16");
    hoursList.add("17");
    hoursList.add("18");
    hoursList.add("19");
    hoursList.add("20");
    hoursList.add("21");
    hoursList.add("22");
    updateAppointmentStartTimeHourComboBox.setItems(hoursList);
    updateAppointmentEndTimeHourComboBox.setItems(hoursList);

    ObservableList minList = FXCollections.observableArrayList();
    minList.add("00");
    minList.add("15");
    minList.add("30");
    minList.add("45");
    updateAppointmentStartTimeMinComboBox.setItems(minList);
    updateAppointmentEndTimeMinComboBox.setItems(minList);

Mój problem polega na tym, że gdy próbuję wypełnić ekran z góry, nie mogę uzyskać wartość godzin lub minut do odpowiedniego wypełnienia.

Mogę dostać czas lokalny z mojego spotkania, jak pokazano tutaj

LocalDateTime ldt = appointment.getStartDate().toLocalDateTime();
    LocalDate ld = ldt.toLocalDate();
    UpdateAppointmentDatePicker.setValue(ld);

    String tempStartHour = String.valueOf(ldt.getHour());
    updateAppointmentStartTimeHourComboBox.getSelectionModel().select(equals(tempStartHour));

Ale nie mogę się zmusić polu listy wybierz odpowiednią wartość i wyświetlić go.

Jeśli mam tempStartHour = "11", jak mogę zmusić swoją kombinację wybrać i wyświetlić "11" z listy

combobox java list
2021-11-22 16:35:47
2
0

String.valueOf(ldt.getHour())

Można utworzyć ciąg z pokoje godziny. Domyślnie wynik nie zawiera zer po lewej stronie od najniższej znacznej liczby.

Następnie próbujesz porównać tę неупакованную wiersz z wierszami, gdzie 08 i 09 uzupełniane są zerem.

Popraw to, wypełniając wyodrębniony godzinę.

U twojego kodu są inne problemy. Po pierwsze, musisz wybrać godzinę domyślnie, gdy wejście nie wchodzi w zakres 8-22. Po drugie, twoja ostatnia linia nie odpowiada składni, gdzie nie można przekazać equals(tempStartHour) jako argument.

Wskazówka: Jako początkujący, poszukaj inne przykłady kodu dla nauki.

2021-11-22 17:19:18
0

Zakładając, że masz już LocalDateale wystarczy tylko przekształcić w LocalDateTime za pomocą wartości ComboBoxmożna użyć ComboBox<Number> zamiast ComboBox<String>i a NumberStringConverter aby dodać prefiks 0 dla pojedynczych godzin lub minut (08:00 zamiast 8:0).

public class App extends Application {

    @Override
    public void start(Stage stage) {

        LocalDate date = LocalDate.now();

        ComboBox<Number> cbHourStart = new ComboBox<>();
        ComboBox<Number> cbHourEnd = new ComboBox<>();

        ComboBox<Number> cbMinuteStart = new ComboBox<>();
        ComboBox<Number> cbMinuteEnd = new ComboBox<>();

        NumberStringConverter converter = new NumberStringConverter("00");

        cbHourStart.setConverter(converter);
        cbHourEnd.setConverter(converter);
        cbMinuteStart.setConverter(converter);
        cbMinuteEnd.setConverter(converter);

        IntStream.rangeClosed(8, 22).forEach(cbHourStart.getItems()::add);
        IntStream.rangeClosed(8, 22).forEach(cbHourEnd.getItems()::add);

        IntStream.iterate(0, i -> i + 15).limit(4).forEach(cbMinuteStart.getItems()::add);
        IntStream.iterate(0, i -> i + 15).limit(4).forEach(cbMinuteEnd.getItems()::add);

        cbHourStart.getSelectionModel().select(0);
        cbHourEnd.getSelectionModel().select(0);

        cbMinuteStart.getSelectionModel().select(0);
        cbMinuteEnd.getSelectionModel().select(0);

        ObjectProperty<LocalTime> startTime = new SimpleObjectProperty<>();
        ObjectProperty<LocalTime> endTime = new SimpleObjectProperty<>();

        cbHourStart.getSelectionModel().selectedItemProperty()
                .addListener((obs, oldVal, newVal) -> startTime.setValue(
                        LocalTime.of(newVal.intValue(), 
                                cbMinuteStart.getSelectionModel().getSelectedItem().intValue())));

        cbMinuteStart.getSelectionModel().selectedItemProperty()
                .addListener((obs, oldVal, newVal) -> startTime.setValue(
                        LocalTime.of(cbHourStart.getSelectionModel().getSelectedItem().intValue(), 
                                newVal.intValue())));   

        cbHourEnd.getSelectionModel().selectedItemProperty()
                .addListener((obs, oldVal, newVal) -> endTime.setValue(
                        LocalTime.of(newVal.intValue(), 
                                cbMinuteEnd.getSelectionModel().getSelectedItem().intValue())));

        cbMinuteEnd.getSelectionModel().selectedItemProperty()
                .addListener((obs, oldVal, newVal) -> endTime.setValue(
                        LocalTime.of(cbHourEnd.getSelectionModel().getSelectedItem().intValue(), 
                                newVal.intValue())));

        startTime.addListener((obs, oldVal, newVal) -> 
                System.out.println("Start time: " + date.atTime(newVal)));

        endTime.addListener((obs, oldVal, newVal) -> 
                System.out.println("End time: " + date.atTime(newVal)));
    
        HBox hbStart = new HBox(5, cbHourStart, new Label(":"), cbMinuteStart);
        HBox hbEnd = new HBox(5, cbHourEnd, new Label(":"), cbMinuteEnd);

        VBox pane = new VBox(20, hbStart, hbEnd); 

        Scene scene = new Scene(new StackPane(pane));

        stage.setScene(scene);
        stage.show();

    }

    public static void main(String[] args) {
        launch();
    }

}

Uwaga:

Przykład ten można uprościć stosując binding zamiast dodawać detektorów zmian. Jednak są one aktualizowane leniwie, więc trzeba będzie dodać detektory zmian w właściwości, aby wymusić ponowne przeliczenie wartości.

Jeśli korzystasz już z detektory właściwości, można wymienić wszystkie detektory zmian w powyższym przykładzie na:

startTime.bind(Bindings.createObjectBinding(() -> 
        LocalTime.of(
                cbHourStart.getSelectionModel().getSelectedItem().intValue(),
                cbMinuteStart.getSelectionModel().getSelectedItem().intValue()), 
        cbHourStart.getSelectionModel().selectedItemProperty(), 
        cbMinuteStart.getSelectionModel().selectedItemProperty()));

endTime.bind(Bindings.createObjectBinding(() -> 
        LocalTime.of(
                cbHourEnd.getSelectionModel().getSelectedItem().intValue(),
                cbMinuteEnd.getSelectionModel().getSelectedItem().intValue()), 
        cbHourEnd.getSelectionModel().selectedItemProperty(), 
        cbMinuteEnd.getSelectionModel().selectedItemProperty()));
2021-11-22 17:13:29

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................