将 ImageView 装入 TreeTableCell

Fitting an ImageView into a TreeTableCell

我正在使用 JFXTreeTableView,它有一个显示图像的列。该列的构造如下:

JFXTreeTableColumn<MyLog, ImageView> statusColumn = new JFXTreeTableColumn<>("Status");
statusColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<MyLog, ImageView> param) -> {
    return param.getValue().getValue().statusImage;
});

class 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))));
    }
}

我要显示的图片是这张:

但是,图像没有正确放入单元格中。这是 table 的样子:

如何在不修改图像本身的情况下使图像适合单元格?

您应该将要显示的数据 (Image) 及其显示方式 (ImageView) 分开。

这是通过修改 MyLogstatusImage 属性 以包含类型 Image 并使用 cellFactory returns TreeTableCell 使用 ImageView 显示图像。

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);
    }
});