การเลือกแบบเจาะจงค่าจากรายชื่อของจาวา

0

คำถาม

ฉันกำลังพยายามสร้างการจัดตารางโปรแกรมที่ฉันสามารถปรับปรุงลูกค้านัดครั้งแล้ว ฉันสามารถบันทึกของฉันนัดแต่กำลังปรับปรุงพวกเขาถูกสักหน่อสับสน

ฉันต้อง 2 รายชื่อสำหรับชั่วโมงกับนาทีที่ฉันทำอยู่ comboboxes ที่แสดงทางด้านล่างนี้

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

ปัญหาของฉันคือตอนที่ฉันกำลังพยายาม prepopulate องจอภาพ,ฉันไม่สามารถเอารองค่าของชั่วโมงหรือนาทีที่จะ populate กว่านี้ละกัน

ฉันสามารถเอา LocalDateTime จากของฉันนัดหมายที่แสดงที่นี่

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

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

แต่ฉันไม่สามารถเอากล่องคอมโบเพื่อเลือกที่เหมาะสมค่าและแสดงมัน

ถ้าฉันมี tempStartHour="11"ได้ยังไงฉันเอากล่องคอมโบเพื่อเลือกและการแสดง"11"จากรายการ

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

String.valueOf(ldt.getHour())

คุณกำลังทำการสร้างข้อความจากคนชั่วโมงหมายเลข โดยปริยายที่ผลลัพธ์ไม่มีศูนย์ทางด้านซ้ายของส่วนตัวเลขสำคัญ.

งั้นคุณพยายามจะตรงกับที่ unpadded ข้อความต่อต้านใช้เส้นสายอยู่ไหน 08 แล้ว 09 เป็นคนไข้โรคจิตไม่อกับศูนย์ศูนย์ศูนย์

แก้ไขเรื่องนี้โดย นุ่นช่วยของคุณดึงชั่วโมง.

รหัสของคุณคงมีปัญหาอื่น สำหรับหนึ่งคุณต้องเลือกค่าปริยายชั่วโมงสำหรับตอนที่นำเข้าข้อมูลไม่ใช่ภายในของคุณ 8-22 ผมสามารถบอกได้นะ สำหรับอีกคนสุดท้ายของคุณบนเส้นล้มเหลวในรูปแบบการสั่งงานอยู่ที่ไหนคุณไม่สามารถผ่าน equals(tempStartHour) เป็นข้อโต้แย้ง

เคล็ดลับ:ตอนเป็นเชิดแพลตตินั่มทั้งหมดไปใช่ง,ค้นตำแหน่งแฟ้มออกไปกันรหัสตัวอย่างต้องฝึก-ไม่ใช่ว่าส่วนหนึ่ง

2021-11-22 17:19:18
0

สมมติว่าคุณจะทำไปเรียบร้อยแล้วที่ LocalDateแต่คุณเพียงต้องการจะแปลงไป LocalDateTime การใช้ค่าของคน ComboBoxคุณสามารถใช้เป็น ComboBox<Number> แทนที่จะเป็น ComboBox<String>และเป็น NumberStringConverter ที่จะเพิ่มนำหน้าด้วย 0 สำหรับเดียว-ตัวเลขชั่วโมงหรือนาที(08:00 แทนที่จะเป็น 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();
    }

}

ข้อควรทราบ:

ตัวอย่างสามารถเป็นประยุกต์@item text character set ใช้ binding แทนที่จะเป็นการเพิ่มเปลี่ยน listeners. อย่างไรก็ตามพวกเขาปรับปรุงข้อมูลแล้ว lazily ดังนั้นคุณจะต้องเพิ่มเปลี่ยน listeners ที่คุณสมบัติของเพื่อบังคับให้เป็น recalculation ของค่า.

ถ้าคุณอยู่แล้วโดยใช้ listeners สำหรับคุณสมบัติของคุณสามารถแทนที่ทั้งหมดเปลี่ยน listeners ของคนก่อนตัวอย่างกับ:

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

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่