Java listesinden belirli bir değer seçme

0

Soru

Müşteri randevu saatlerini güncelleyebileceğim bir zamanlama programı oluşturmaya çalışıyorum. Randevularımı kaydedebiliyorum ancak bunları güncellemek biraz kafa karıştırıcıydı.

Aşağıda gösterildiği gibi combobox'lara koyduğum Saatler ve Dakikalar için 2 listem var.

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);

Benim sorunum, ekranı önceden doldurmaya çalıştığımda, buna göre doldurmak için saatlerin veya dakikaların değerini alamıyorum.

Burada gösterildiği gibi randevumdan LocalDateTime alabiliyorum

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

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

Ancak combobox'un uygun değeri seçmesini ve görüntülemesini sağlayamıyorum.

tempStartHour = " 11 "varsa, combobox'umu listeden "11" seçip görüntülemesini nasıl sağlayabilirim

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

String.valueOf(ldt.getHour())

Saat numarasından bir dize oluşturuyorsunuz. Varsayılan olarak, sonucun en önemli basamağın solunda sıfır yoktur.

Sonra bu eklenmemiş dizeyi dizelerle eşleştirmeye çalışırsınız 08 ve 09 sıfır ile doldurulur.

Çıkarılan saatinizi doldurarak bunu düzeltin.

Kodunuzun başka sorunları da var. Birincisi, girişin 8-22 aralığınızda olmadığı zamanlar için varsayılan bir saat seçmeniz gerekir. Bir diğeri için, son satırınız sözdiziminde başarısız olur, burada geçemezsiniz equals(tempStartHour) argüman olarak.

İpucu: Yeni başlayanlar olarak, çalışılacak diğer kod örneklerini arayın.

2021-11-22 17:19:18
0

Zaten sahip olduğunuzu varsayarsak LocalDate, ama sadece dönüştürmek gerekir LocalDateTime değerleri kullanarak ComboBox olabilir kullanın ComboBox<Number> yerine ComboBox<String> ve bir NumberStringConverter önek eklemek için 0 tek basamaklı saatler veya dakikalar için (08:00 yerine 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();
    }

}

Not:

Örnek kullanılarak basitleştirilebilir binding değişiklik dinleyicileri eklemek yerine. Ancak, bunlar tembelce yenilenir, bu nedenle değerlerin yeniden hesaplanmasını zorlamak için özelliklere değişiklik dinleyicileri eklemeniz gerekir.

Özellikler için zaten dinleyici kullanıyorsanız, önceki örnekteki tüm değişiklik dinleyicilerini şununla değiştirebilirsiniz:

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

Diğer dillerde

Bu sayfa diğer dillerde

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