Встраивание ImageView в TreeTableCell - PullRequest
0 голосов
/ 03 июня 2018

Я использую 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))));
    }
}

Изображение, которое я пытаюсь отобразить, выглядит следующим образом:

enter image description here

Однако изображение не помещается в ячейку правильно.Вот как выглядит таблица:

enter image description here

Как сделать так, чтобы изображение помещалось в ячейку без изменения самого изображения?

1 Ответ

0 голосов
/ 03 июня 2018

Вы должны разделить данные, которые вы хотите отобразить (Image), и способ их отображения (ImageView).

Это делается путем изменения свойства MyLog * statusImage, чтобы оно содержаловведите Image и используйте cellFactory, который возвращает 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);
    }
});
...