我正在使用JFXTreeTableView
具有显示图像的列。该列的构造如下:
JFXTreeTableColumn<MyLog, ImageView> statusColumn = new JFXTreeTableColumn<>("Status");
statusColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<MyLog, ImageView> param) -> {
return param.getValue().getValue().statusImage;
});
这个类MyLog
看起来像这样:
public class MyLog extends RecursiveTreeObject<MyLog> {
// more properties...
public ObjectProperty<ImageView> statusImage = new SimpleObjectProperty<ImageView>();
public MyLog(String imagePath)
{
statusImage.set(new ImageView(new Image(MyProject.class.getResourceAsStream(imagePath))));
}
}
我试图显示的图像是这样的:
但是,图像没有正确地放入单元格中。这是表的外观:
如何在不修改图像本身的情况下使图像适合单元格?
您应该将要显示的数据 ( Image
) 与其显示方式( )分开ImageView
。
这是通过修改MyLog
的statusImage
属性以包含类型Image
并使用cellFactory
返回TreeTableCell
使用ImageView
s 显示图像的 s 来完成的。
public class MyLog extends RecursiveTreeObject<MyLog> {
// more properties...
public final ObjectProperty<Image> statusImage;
public MyLog(String imagePath) {
this(new Image(MyProject.class.getResourceAsStream(imagePath)));
}
/**
* Constructor for passing Image objects.
* (Could be helpful to reuse Images to reduce the footprint.)
*/
public MyLog(Image statusImage) {
this.statusImage = new SimpleObjectProperty(statusImage);
}
}
statusColumn.setCellFactory(column -> new JFXTreeTableCell<MyLog, Image>() {
private final ImageView imageView;
{
imageView = new ImageView();
imageView.setFitWidth(20);
imageView.setFitHeight(20);
setGraphic(imageView);
}
@Override
protected void updateItem(Image item, boolean empty) {
super.updateItem(item, empty);
imageView.setImage(item);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句