Choisir une valeur à partir d'une liste Java

0

La question

Je suis en train de créer un programme de planification où je peux mettre à jour le client heures de rendez-vous. Je suis capable de sauver mes rendez-vous mais la mise à jour a été un peu déroutant.

J'ai 2 listes pour les Heures et les Minutes que je suis en train de monter dans les zones de liste modifiables, comme illustré ci-dessous.

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

Mon problème est quand je suis en train de remplir l'écran, je ne peux pas obtenir la valeur du nombre d'heures ou de minutes à remplir en conséquence.

Je suis en mesure d'obtenir la LocalDateTime de ma nomination comme illustré ici

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

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

Mais je ne peux pas obtenir la zone de liste déroulante pour sélectionner la valeur appropriée et l'afficher.

Si j'ai tempStartHour = "11" comment puis-je obtenir ma zone de liste déroulante pour sélectionner et afficher "11" à partir de la liste

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

String.valueOf(ldt.getHour())

Vous faites une chaîne de caractères à partir de l'heure nombre. Par défaut, le résultat n'a pas de zéros à gauche des chiffres plus importantes.

Ensuite, vous essayez de faire correspondre que unpadded chaîne contre les cordes où 08 et 09 sont rembourrés avec un zéro.

Résoudre ce problème en rembourrage extraites de votre heure.

Votre code a d'autres problèmes. Pour un, vous devez choisir une valeur par défaut de l'heure lorsque l'entrée n'est pas au sein de votre 8-22 gamme. Pour une autre, votre dernière ligne échoue dans la syntaxe, où vous ne pouvez pas passer equals(tempStartHour) comme argument.

Conseil: en tant Que débutant, chercher d'autres exemples de code à l'étude.

2021-11-22 17:19:18
0

En supposant que vous avez déjà la LocalDatemais vous avez seulement besoin de les convertir à LocalDateTime en utilisant les valeurs de la ComboBox, vous pouvez utiliser un ComboBox<Number> au lieu de ComboBox<String>et un NumberStringConverter pour ajouter un préfixe 0 pour un seul chiffre en heures ou en minutes (08:00 au lieu de 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();
    }

}

Note:

L'exemple peut être simplifiée en utilisant binding au lieu d'ajouter de modifier les auditeurs. Cependant, ils sont actualisés paresseusement de sorte que vous aurez besoin d'ajouter du changement d'auditeurs pour les propriétés à un nouveau calcul des valeurs.

Si vous êtes déjà à l'aide d'écouteurs pour les propriétés, vous pouvez remplacer tous les changements qui se des auditeurs de l'exemple précédent avec:

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

Dans d'autres langues

Cette page est dans d'autres langues

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