细胞工厂的财产

时间:2017-07-23 19:29:07

标签: javafx

嗨,我在这个Cell Factory有一点问题:

private Callback<TableColumn<Member, String>,
        TableCell<Member, String>> setPhotoCellFactory() {

    Callback<TableColumn<Member, String>, TableCell<Member, String>> callback = new Callback<TableColumn<Member, String>, TableCell<Member, String>>() {
        @Override
        public TableCell<Member, String> call(TableColumn<Member, String> param) {
            TableCell<Member, String> cell = new TableCell<Member, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    System.out.println(item);
                    super.updateItem(item, empty);
                    ImageView imageview = new ImageView();
                    imageview.setFitHeight(TABLE_IMAGE_MEMBER_HEIGHT);
                    imageview.setFitWidth(TABLE_IMAGE_MEMBER_WIDTH);
                    if(item != null) {
                        imageview.setImage(new Image(item));
                        setGraphic(imageview);
                    } else {
                        if(!empty) {
                            imageview.setImage(new Image(ImageFiles.GENERIC_MALE.toString()));
                            setGraphic(imageview);
                        } else {
                            setGraphic(null);
                        }
                    }
                }
            };
            return cell;
        }
    };
    return  callback;
}

当Photo为null时,在Member对象中getter返回与其性别对应的图像。在这个回调中,似乎没有使用getter。 在这种情况下如何访问成员属性?

@EDIT

在会员班中:

public String getPhoto() {
    if (photo.getValue() != null && !photo.getValue().equals("")) {
        return photo.get();
    } else if (getGender().equals(Gender.F)) {
        return ImageFiles.GENERIC_FEMALE.toString();
    } else {
        return ImageFiles.GENERIC_MALE.toString();
    }
}

添加CellValueFactory:

this.simPhotoColumn.setCellValueFactory(data -> data.getValue().photoProperty());

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。我正在搜索如何在CellFactory中设置图像的错误。 响应是设置自定义CellValueFactory。

我被替换了这个:

this.simPhotoColumn.setCellValueFactory(data -> data.getValue().photoProperty());

by:

  this.memberPhoto.setCellValueFactory(getPhotoValueFactory());

private Callback<TableColumn.CellDataFeatures<Member, String>, ObservableValue<String>> getPhotoValueFactory() {
    Callback<TableColumn.CellDataFeatures<Member, String>, ObservableValue<String>> callback = param -> new ReadOnlyObjectWrapper<>(param.getValue().getPhoto());
    return callback;
}