0

我正在使用一个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))));
    }
}

我要显示的图像是这个:

在此处输入图像描述

但是,图像无法正确装入单元格。这是表格的外观:

在此处输入图像描述

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

4

1 回答 1

1

您应该将要显示的数据 ( Image) 和它的显示方式( ) 分开ImageView

这是通过修改MyLog'statusImage属性以包含类型Image并使用cellFactory返回TreeTableCells 的 a 来完成的,该 s 使用ImageViews 来显示图像。

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);
    }
});
于 2018-06-03T20:41:00.543 回答