как я могу обновить элемент tableview? - PullRequest
0 голосов
/ 21 апреля 2019

я переопределил элемент обновления TableCell в javafx 8, но когда я прокручиваю элементы tableview, некоторые элементы будут обновляться случайным образом

Column.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Person, Boolean>>() {
            @Override
            public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> param) {
                return new TableCell<Person, Boolean>() {
                    @Override
                    public void updateItem(Boolean item, boolean empty) {
                        super.updateItem(item, empty);
                        if (!isEmpty()) {
                            if (item.booleanValue()) {
                                setGraphic(new ImageView(IconResource.getImage(ICON.FLAG)));
                            }
                        } else {
                            setGraphic(null);
                        }
                    }
                };
            }
        });

1 Ответ

0 голосов
/ 21 апреля 2019

Необходимо убедиться, что свойство graphic ячейки обновляется правильно, независимо от элемента (или факта, что оно «отсутствует»).

В вашем случае вы неправильно обрабатываетеячейки, которые переходят от true как элемент к false как элемент: вы просто сохраняете рисунок для true вместо его удаления.

Кроме того, я рекомендую сохранить ссылку на ImageView, чтобы избежать повторного созданияэто:

Column.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Spectrum, Boolean>>() {


    @Override
    public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> param) {
        return new TableCell<Person, Boolean>() {

            private final ImageView image = new ImageView(IconResource.getImage(ICON.FLAG));

            @Override
            public void updateItem(Boolean item, boolean empty) {
                super.updateItem(item, empty);
                setGraphic(item == null || !item ? null : image);
            }
        };
    }
});
...