Я пытаюсь вставить изображение в таблицу в JavafX. Вот как я настроил свой вид таблицы:Показать изображение в таблице
TableColumn prodImageCol = new TableColumn("IMAGES");
prodImageCol.setCellValueFactory(new PropertyValueFactory<Product, Image>("prodImage"));
prodImageCol.setMinWidth(100);
// setting cell factory for product image
prodImageCol.setCellFactory(new Callback<TableColumn<Product,Image>,TableCell<Product,Image>>(){
@Override
public TableCell<Product,Image> call(TableColumn<Product,Image> param) {
TableCell<Product,Image> cell = new TableCell<Product,Image>(){
public void updateItem(Product item, boolean empty) {
if(item!=null){
ImageView imageview = new ImageView();
imageview.setFitHeight(50);
imageview.setFitWidth(50);
imageview.setImage(new Image(product.getImage()));
}
}
};
return cell;
}
});
viewProduct.setEditable(false);
viewProduct.getColumns().addAll(prodImageCol, prodIDCol, prodNameCol, prodDescCol, prodPriceCol, col_action);
viewProduct.getItems().setAll(product.populateProductTable(category));
private SimpleObjectProperty prodImage;
public void setprodImage(Image value) {
prodImageProperty().set(value);
}
public Object getprodImage() {
return prodImageProperty().get();
}
public SimpleObjectProperty prodImageProperty() {
if (prodImage == null) {
prodImage = new SimpleObjectProperty(this, "prodImage");
}
return prodImage;
}
И это, как я получить изображение из базы данных:
Blob blob = rs.getBlob("productImage");
byte[] data = blob.getBytes(1, (int) blob.length());
bufferedImg = ImageIO.read(new ByteArrayInputStream(data));
image = SwingFXUtils.toFXImage(bufferedImg, null);
Однако я получаю сообщение об ошибке при настройке вида таблицы: ImageView. setImage (новое изображение (product.getImage())); сообщение об ошибке, как:
no suitable constructor found for Image(Image)
constructor Image.Image(String,InputStream,double,double,boolean,boolean,boolean) is not applicable
(actual and formal argument lists differ in length)
constructor Image.Image(int,int) is not applicable
(actual and formal argument lists differ in length)
constructor Image.Image(InputStream,double,double,boolean,boolean) is not applicable
(actual and formal argument lists differ in length)
constructor Image.Image(InputStream) is not applicable
(actual argument Image cannot be converted to InputStream by method invocation conversion)
constructor Image.Image(String,double,double,boolean,boolean,boolean) is not applicable
(actual and formal argument lists differ in length)
constructor Image.Image(String,double,double,boolean,boolean) is not applicab...
я сумел получить и отобразить изображение внутри зрения изображения, но тем не менее, я не могу отобразить его в столбце таблицы. Любая помощь будет оценена по достоинству. Заранее спасибо.
Пробовал это в таблице, в которой уже были текстовые столбцы, для отображения поля blob тоже, и 'updateItem' никогда не вызывался. – ajeh
a) подпись метода 'updateItem' неверна; тип элемента - это параметр второго типа (вы не замечаете аннотацию '@ Override'?). b) вы должны установить изображение в значение« null », если изображение« Изображение »не отображается, поскольку в противном случае изображение никогда не удаляется, если элементы удалены из таблицы, а также ссылки на «Изображение» остаются в памяти, так как вы сохраняете ссылку в «ImageView» (предотвращает сбор мусора).c) вероятно, «ImageView» должен быть полем «TableCell»; эта группировка более логична и позволяет более легко преломлять/повторно использовать код. – fabian