observableList не показывает строки в цикле для? - PullRequest
0 голосов
/ 27 января 2019

enter image description here

У меня проблема, когда я провожу несколько дней, чтобы отобразить строки в списке наблюдаемых в цикле!Тем не менее, код прекрасно работает в консоли!Любая помощь будет приветствоваться.

 private void showActivitiesDriver() throws IOException {
            Path path = Paths.get("Download/Cards/F__100000015956101711071539.C1B");
            byte[] data = Files.readAllBytes(path);
            dataFileCard = new FileBlockTGD(data);
            w = new WrapperActivityChangeInfo(dataFileCard.getDriver_activity_data()
                    .getActivityDailyRecords().get(i), dataFileCard.getDriver_activity_data()
                    .getActivityDailyRecords().get(i).getActivityChangeInfo().get(j));

            for (i = 0; i < dataFileCard.getDriver_activity_data().getActivityDailyRecords().size(); i++) {

                w.setTheDateTime(dataFileCard.getDriver_activity_data()
                        .getActivityDailyRecords().get(i).getActivityRecordDate().toString());

                System.out.println(w.getTheDateTime());

                dateActivitiesColumn.setCellValueFactory(cellData -> new SimpleStringProperty(
                        cellData.getValue().getTheDateTime()));

                /*
                dateActivitiesColumn.setCellValueFactory(cellData -> new ReadOnlyStringWrapper(
                        DateUtil.parseDateToString(cellData.getValue().getActivityRecordDate())));
                */       

                for (j = 0; j < dataFileCard.getDriver_activity_data().getActivityDailyRecords().get(i).
                        getActivityChangeInfo().size(); j++) {

                    driverActivitiesColumn.setCellValueFactory(cellData -> new SimpleStringProperty(
                            cellData.getValue().getTheActivity()));

                    WrapperActivityChangeInfoList = FXCollections.observableArrayList();

                    WrapperActivityChangeInfoList.add(new WrapperActivityChangeInfo(dataFileCard.getDriver_activity_data()
                            .getActivityDailyRecords().get(i), dataFileCard.getDriver_activity_data()
                            .getActivityDailyRecords().get(i).getActivityChangeInfo().get(j)));
                    System.out.println(WrapperActivityChangeInfoList);
                }

            }
            // Set data to tableview
            activitiesDriverTableView.setItems(WrapperActivityChangeInfoList);
            //System.out.println(WrapperActivityChangeInfoList.toString());
        }
    }

Я ожидаю увидеть все строки, но только одну, но код хорошо работает в консоли.

1 Ответ

0 голосов
/ 27 января 2019

Вы создаете новый ObservableList (изначально пустой) в каждой итерации внутреннего цикла. Таким образом, после вызова add вы получите список, содержащий один список. Один из этих списков назначается на TableView в конце. Должна отобразиться последовательность дат с последующим числом WrapperActivityChangeInfo.toString результатов , окруженных [] в выходных данных, указывающих, что вы печатаете несколько списков.

Кроме того, нет смысла присваивать cellValueFactory на каждой итерации цикла.

Вам необходимо переместить создание списка за пределы циклов .:

...

WrapperActivityChangeInfoList = FXCollections.observableArrayList();

driverActivitiesColumn.setCellValueFactory(cellData -> new SimpleStringProperty(
                cellData.getValue().getTheActivity()));

for (i = 0; i < dataFileCard.getDriver_activity_data().getActivityDailyRecords().size(); i++) {

    ...       

    for (j = 0; j < dataFileCard.getDriver_activity_data().getActivityDailyRecords().get(i).
            getActivityChangeInfo().size(); j++) {

        WrapperActivityChangeInfoList.add(new WrapperActivityChangeInfo(dataFileCard.getDriver_activity_data()
                .getActivityDailyRecords().get(i), dataFileCard.getDriver_activity_data()
                .getActivityDailyRecords().get(i).getActivityChangeInfo().get(j)));
        System.out.println(WrapperActivityChangeInfoList);
    }

}
activitiesDriverTableView.setItems(WrapperActivityChangeInfoList);
...